Qt多文檔界面應用設計


使用Qt編寫多文檔界面(MDI)應用相當方便,主要會使用到QMdiArea和QMdiSubWindow兩個類。可以查看Qt Asistant中這兩個類的說明文檔,里面介紹的相當詳細。另外,可以搜索例程"Mdi Example",這是提供的一個示例程序,這是一個多文檔編輯器,代碼很詳細,只是缺少注釋,不過很簡單,應該容易看懂。接下來,我在這里介紹最簡單、最精華的部分。

 

1 QMdiArea

      這個類相當於一個MDI窗口管理器,用來管理添加到這個區域中的多個子窗口。我們在應用中新建的所有子窗口都需要通過addSubWindow()方法添加到其中。一般情況下,QMdiArea被用作QMainWindow的中央部件,但是,你也可以將它添加到任意的布局中。下面的代碼就是將其添加到中央部件:

1 QMainWindow *mainWindow = new QMainWindow;
2 mainWindow->setCentralWidget(mdiArea);
View Code

 

2 QMdiSubWindow

  這個類繼承自QWidget,主要用來創建MDI子窗體實例。然后,可以通多調用QMdiArea的addSubWindow()方法將新建的子窗體實例添加到多文檔界面區域。當然,我們也可以不用QMdiSubWindow類來創建子窗體,而直接使用繼承自QWidget的類,比如下面的代碼:

1 void MainWindow::actNewWindow()
2 {
3     QLabel *label = new QLabel;
4     m_mdiArea->addSubWindow(label);
5     label->show();
6 }
View Code

  不過,使用QMdiSubWindow類的話,我們可以使用其提供的一些方便的成員方法,詳細內容請參看幫助手冊,下面給出一段示例代碼:

1 void MainWindow::actNewWindow()
2 {
3     QLabel *label = new QLabel;
4     QMdiSubWindow *subWin = new QMdiSubWindow;
5     subWin->setWidget(label);
6     subWin->setAttribute(Qt::WA_DeleteOnClose);
7     m_mdiArea->addSubWindow(subWin);
8     subWin->show();
9 }
View Code

 

3 示例程序

最后,再給出一個簡單的應用示例。這個代碼中,我們使用最簡單的Qt向導創建一個QMainWindow應用。然后,在菜單中添加一個“New”菜單項,用來每次創建一個子窗體,並顯示在MDI區域。每個子窗體就是一個QLabel部件,用來顯示一個標簽。構造函數代碼如下:

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent) :
 5     QMainWindow(parent),
 6     ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9 
10     //Create a MDI Area
11     m_mdiArea = new QMdiArea;
12     this->setCentralWidget(m_mdiArea);
13 
14     connect(ui->actionNew, SIGNAL(triggered()), this, SLOT(actNewWindow()));
15 }
View Code

對應的新建子窗體槽函數定義如下:

1 void MainWindow::actNewWindow()
2 {
3     QLabel *label = new QLabel(tr("MDI SubWindow!"));
4     QMdiSubWindow *subWin = new QMdiSubWindow;
5     subWin->setWidget(label);
6     subWin->setAttribute(Qt::WA_DeleteOnClose);
7     m_mdiArea->addSubWindow(subWin);
8     subWin->show();
9 }
View Code

程序運行效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM