Home / Programmazione / C - C++ / Salvare la posizione della finestra in Qt
Mattepuffo

Salvare la posizione della finestra in Qt

Salvare la posizione della finestra in Qt

Piccolo tip per Qt: come salvare l'ultima posizione di una finestra in Qt, in modo da riavviarla nella stessa posizione?

Semplicemente usando QSettings!

Prima di tutto nel file di intestazione definiamo:

  • una macro POS
  • una variabile privata QSettings
  • una funzione che intercetta l'evento di chiusura della finestra

Questo il codice del file di intestazione:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSettings>

#define POS "posizione"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    virtual ~MainWindow();

protected:
    void closeEvent(QCloseEvent *event);

private:
    Ui::MainWindow *ui;
    QSettings settings;
};

#endif // MAINWINDOW_H

A questo punto nel file di implementazione:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setAcceptDrops(true);
    if (settings.contains(POS))
    {
        move(settings.value(POS).toPoint());
    }
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    settings.setValue(POS, pos());
    event->accept();
}

MainWindow::~MainWindow()
{
    delete ui;
}

Nel costruttore controlliamo che POS sia valorizzato; in caso affermativo usiamo move() per "spostare" la finestra in quel punto.

Nella funzione closeEvent, settiamo la variabile, che verrà salvata come impostazione del programma in generale.

Per farlo basta richiamare la proprietà pos(), che ritorna proprio la posizione corrente.

Provate a lanciare il programma, spostare la finestra, chiudere il programma e riavviarlo.

Se è tutto ok, si dovrebbe riaprire nell'ultima posizione.

Enjoy!