Qt應用程序之Application Main Window詳解

                                                         Qt應用程序之Application Main Window詳解

【主窗口類概覽】

      下面的類提供了創建典型現代主窗口應用程序的所有事物,例如:主窗口自身,菜單以及工具欄,狀態欄等等。


【主窗口類】

    Qt 提供了下面的類用於管理主窗口以及與用戶界面關聯的組件:

    *QmainWindow是構建應用程序主要的類。與接下來的QDockWidget和QToolBar類相比,它代表了應用程序頂級的用戶界面。

    *QDockWidget提供了用於創建工具面板或者是幫助窗口的組件。Dock widgets保持自己的屬性,可以移動,關閉或者是作爲外部       窗口浮動。

    *QtoolBar提供了通用的工具欄部件,可以保持幾個跟動作相關的部件,例如:按鈕,菜單等等。它可以與菜單以及鍵盤很好的合         作。

【示例代碼】

        使用QMainWindow是最直接的方式。一般情況下,我們都會繼承自QMainWindow並且在其構造函數中設置菜單,工具欄和菜單欄以及dock widgets部件。

        將菜單添加到主窗口中十分簡單,只需要創建菜單,將菜單添加到主窗口的菜單欄上。注意,在第一次調用QMainWindow::menuBar()函數在第一次被調用的時候就會創建菜單欄。你也可以調用QMainWindow::setMenuBar()設置自定義的菜單欄。




         一旦動作被創建,我們就可以將他們添加到主窗口部件上,首先我們將他們添加到菜單上:

QtoolBar和QMenu類使用了Qt的action系統來提供一致的API。在上面的代碼中,我們使用QMenu::addAction()函數將已經存在的actions添加到file菜單中。QToolBar也提供了這個函數,這使得我們可以在主窗口的不同地方重用actions。這就避免了一些不必要的重複的勞動。

         我們創建了主創口的工具欄,並且將期望的動作添加上去:在這個示例中,工具欄被限制在主窗口的頂部和底部,並且初始化是放置在主創口的頂部工具欄的。我們可以看到newAct和openAct同時顯示在工具欄和file菜單上。

        QDockWidget通常以類似QToolBar的方式使用。我們創建一個dockwidget作爲主創口的子窗口部件,並且爲dock widget添加它自己的子窗口部件。


        在這個示例中,dock widget僅僅可以被放置在左邊和右邊的dock區域,並且初始是放置在左邊的dock區域。

        QMainWindow API允許程序員將dock widget放置在四個角落的dockwidget區域。如果需要,我們可以使用                                  QMainWindown::setCorner()函數改變默認情況。


         下面的圖顯示了上面代碼展示的配置過程。注意,左邊和右邊的dockarea包括頂部和底部的拐角。


         一旦主窗口的所有組件都被設置起來了,那麼我們可以如下創建主窗口並且安裝它。中心部件可以是QWidget的任何子類。


【示例】



            下載Qt的源代碼,可以自行編譯這些示例程序,如下是我們自己編譯main window示例程序:


     下面是運行後的效果,這個程序作爲main window示例程序實在是非常好:


【源碼分析】

1、首先來看一下代碼結構和.pro工程文件的內容:


2、分析一下里麪包含的一些類

本示例主要包括三個類:ColorSwatch、ToolBar以及MainWindow。

    ColorSwatch:繼承自QDockWidget,應用程序的dock widget。

    ToolBar:繼承自QToolBar,應用程序的工具欄。

    MainWindow:繼承自QMainWindow,應用程序的主窗口。

3、應用程序的啓動


4、代碼剖析

   首先看看MainWIndow的構造函數,其實就是前面介紹到的內容:設置Menu,ToolBar,以及DockWidget:


    首先是設置中心窗口爲QTextEdit;接着是創建ToolBar(工具欄)

    setupToolBar():創建ToolBar對象,添加到主窗口的工具欄中。


setupMenuBar():創建主窗口的菜單項。


setupDockWidgets():用於創建dock widget窗口部件。


【總結】

     以上就是整個mainwindows示例程序的整體結構了,把握住了整體結構再來看代碼的細節處理就容易許多了,至於細節部分在此就不羅列了。

【附錄】

     最後,我們來看看幾個主要的類的實現:ToolBar和ColorSwatch。

*ToolBar

『定義』


『構造函數』


 。。。。。。。。。。。。。。


1、該構造函數就是根據傳入的字符串構建相應的菜單和工具欄,從mainwindow.cpp中我們知道構造了三個工具欄(菜單),菜單的名稱是“Tool Bars”

2、將QMenuaboutToShow信號與自定義的槽函數updateMenu關聯起來。可以在Qt Creator中將光標停留在QMenu上,按下F1鍵,就會出現上下文幫助信息,這裏來看看aboutToshow這個信號在何時發射:


aboutToshow信號是在菜單顯示之前發射的,也就是初始化的時候使用到。

下面我們主要來看一下與之關聯的槽函數updateMenu的實現:


該槽函數首先獲取主窗口,然後獲取主窗口的工具欄區域,根據主窗口可以將ToolBar放置在哪幾個區域來初始化Action(也即對應的菜單項)選中與否。

接下來的就是其它的幾個槽函數:ToolBar::order();ToolBar::randomize();ToolBar::addSpinBox();ToolBar::removeSpinBox(),這些槽函數都跟具體的Action關聯:


1】槽函數ToolBar::order()的實現:

         該函數的功能是按照一定的順序排列工具欄中的actions,具體做法就是獲取所有的actions之後再按照一定的順序添加到一個QList<QAction *> ordered列表中,再清除原先的actions,最後再添加具有一定順序的ordered,具體代碼如下:


2】槽函數ToolBar::randomize()的實現:

         該函數的功能是隨機的排列工具欄上的actions,具體做法就是先獲取所有的actions之後再隨機的將這些actions逐一添加到一個QList<QAction *> randomized列表中,再清除原先的actions,最後再添加具有隨機順序的randomized,具體代碼如下:


3】槽函數ToolBar::addSpinBox()的實現:

         該函數的功能是判斷toolbar上是否已經添加了一個QSpinBox,如果添加了,那麼去使能add操作,使能remove操作,添加後的效果如下:


代碼實現如下:


4】槽函數ToolBar::removeSpinBox()的實現:

         該函數的功能與上面的相反,判斷如果已經添加了一個QSpinBox,則刪除,並且使能add操作,去使能remove操作。

代碼實現如下:


『析構函數』

使用默認析構函數

*ColorSwatch

『定義』



『構造函數』


。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


『析構函數』

使用默認析構函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章