Home / Programmazione / C - C++ / Usare i Multiple Document Interface in Qt
Mattepuffo

Usare i Multiple Document Interface in Qt

Usare i Multiple Document Interface in Qt

I Multiple Document Interface possono essere molto comodi in molti ambiti.

Qui vediamo un esempio base in Qt.

Cominciamo con la finestra principale:

// mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMdiSubWindow>
#include "formclienti.h"

#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_actionClienti_triggered();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

E questa la sua implementazione:

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::on_actionClienti_triggered()
{
    FormClienti *fc = new FormClienti();
    QMdiSubWindow *subWindow = ui->mdiArea->addSubWindow(fc);
    subWindow->show();
}

Qui abbiamo aggiunto:

  • un item al menu che richiamerà il secondo form da aggiungere al MDI
  • un oggetto QMdiSubWindow (tramite il Qt Designer)
  • un SLOT da richiamare quando clicchiamo sull'item del menu

Nello SLOT richiamiamo la seconda finestra e la aggiungiamo alla QMdiSubWindow tramite il metodo addSubWindow.

Questa la seconda finestra:

// formclienti.h

#ifndef FORMCLIENTI_H
#define FORMCLIENTI_H

#include <QWidget>

namespace Ui {
class FormClienti;
}

class FormClienti : public QWidget
{
    Q_OBJECT

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

private:
    Ui::FormClienti *ui;
};

#endif // FORMCLIENTI_H

E il suo file di implementazione:

// formclienti.cpp

#include "formclienti.h"
#include "ui_formclienti.h"

FormClienti::FormClienti(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::FormClienti)
{
    ui->setupUi(this);
}

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

Come potete vedere adesso è vuoto; è solo a scopo dimostrativo.

Cliccando sul menu vedrete comparire la seconda finestra!

Enjoy!