1. 程式人生 > >第六章 多文件介面

第六章 多文件介面

    在主視窗的中央區域能夠提供多個文件的那些應用程式就稱為多文件介面(MDI)。Qt中把QMdiArea類作為中央視窗部件,並且每一個文件視窗都是這個類的子視窗。

    對於多文件介面應用程式有一個管理,就是為他提供一個Window選單,這個選單中包含一些管理這個視窗以及視窗列表的命令。啟用視窗會使用一個選擇標記表示出來。使用者在window選單中單擊代表特定視窗的一項,就可以啟用任何視窗。

介面元素如下;


程式碼大部分與Spreadsheet相似,所以只貼上比較重要的,工程在底下上傳。

解釋在註釋中

MainWindow::MainWindow()
{
    mdiArea = new QMdiArea;
	//建立一個QMdiArea並設定為中央視窗部件
    setCentralWidget(mdiArea);
	//把訊號與將要用來保持更新Window選單的槽連線起來,並且會根據應用程式的狀態來啟用或禁用那些動作
    connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(updateActions()));

    createActions();
    createMenus();
    createToolBars();
    createStatusBar();

    setWindowIcon(QPixmap("images/icon.png"));
    setWindowTitle(tr("MDI Editor"));
    QTimer::singleShot(0, this, SLOT(loadFiles()));
}

void MainWindow::updateActions()
{
    bool hasEditor = (activeEditor() != 0);
    bool hasSelection = activeEditor()
                        && activeEditor()->textCursor().hasSelection();

    saveAction->setEnabled(hasEditor);
    saveAsAction->setEnabled(hasEditor);
    cutAction->setEnabled(hasSelection);
    copyAction->setEnabled(hasSelection);
    pasteAction->setEnabled(hasEditor);
    closeAction->setEnabled(hasEditor);
    closeAllAction->setEnabled(hasEditor);
    tileAction->setEnabled(hasEditor);
    cascadeAction->setEnabled(hasEditor);
    nextAction->setEnabled(hasEditor);
    previousAction->setEnabled(hasEditor);
    separatorAction->setVisible(hasEditor);

    if (activeEditor())
        activeEditor()->windowMenuAction()->setChecked(true);
}
    每當一個新的子視窗被啟用,或者在關閉最後一個子視窗時,都會發射subWindowActivated訊號。在後一種狀況下,他的引數就是一個空指標。訊號會連線到updateActions槽。只有在存在啟用視窗時,絕大多數的選單項才會起作用。

工程程式碼連結:http://pan.baidu.com/s/1jIMOVjC 密碼:yxj8