http://blog.csdn.net/qter_wd007/article/details/7028920
Qt程序中的主窗口通常具有一個中心窗口部件。從理論上來講,任何繼承自QWidget的類的派生類的實例,都可以作為中心窗口部件使用。
-
幾種常見情形
QMainWindow的中心區域可以被任意種類的窗口部件所占用。下面給出的是可能的情形。
⒈ 使用標准的Qt窗口部件(Standard Widget)
像QWidget、Qlabel以及QTextEdit等等這樣的標准窗口部件都可以用作中心窗口部件。
⒉ 使用自定義窗口部件(User-Define-Widget)
有時候,某些有特殊要求的應用程序需要在自定義窗口部件中顯示數據,你可以把自定義的窗口部件作為中心窗口部件。例如,你的繪圖編輯器程序程序就可以使用類似名為PhotoEditor的自定義窗口部件作為自己的中心窗口部件。
3. 使用一個帶布局管理器的普通Widget
有時候,應用程序的中央區域會被許多窗口部件所占用。這時就可以通過使用一個作為所有這些其他窗口部件父對象的QWidget,以及通過使用布局管理器管理這些子窗口部件的大小和位置來完成這一特殊情況。
4. 使用切分窗口(QSplitter)
其實,這種情況是上一種情況的一個例子。多個窗口部件一起使用的另一種方法是使用QSplitter。我們把QSplitter作為一個容器,在其中容納其它的窗口部件,這時的中心窗口部件就是一個QSplitter。QSplitter會在水平方向或者豎直方向上排列它的子窗口部件,用戶可以利用切分條(splitter handle)控制他們的尺寸大小。切分窗口可以包含所有類型的窗口部件,包括其他切分窗口。
5. 使用多文檔界面工作空間(QMdiArea)
如果應用程序使用的是多文檔界面,那么它的中心區域就會被QMdiArea窗口部件所占據,並且每個多文檔界面窗口都是它的一個子窗口界面。QMdiArea是在Qt4.3以后引入的一個支持多文檔應用的類。
6. 使用工作空間部件(QWorkspace)
這種情況通常用於多文檔應用程序中,這時應用程序主窗口的中心部件是一個QWorkspace部件或者它的子類化部件。但這種方法在Qt4.5以后將被廢棄。后面我們還會講到它。
一個Qt主窗口應用程序必須有一個中心窗口部件(Central Widget)。當你采用Qt Designer創建主窗口時,默認情況下,系統已經為你創建了一個中心窗口部件,它是子類化QWidget的。
結合代碼可以方便的設置中心窗口部件,可以調用主窗口類的setCentralWidget()方法,它的原型如下:
void QMainWindow::setCentralWidget ( QWidget * widget )它將把widget設置為主窗口的中心窗口部件。創建中心窗口部件完整的代碼示例如下:
QTextEdit * text;text = new QTextEdit(this);setCentralWidget(text);
Qt應用程序的主窗口管理着中心窗口部件,它會在合適的時候銷毀這個中心窗口部件。每次程序調用setCentralWidget()方法時,先前存在的中心窗口部件將被新的所替換,而且主窗口會銷毀原來的部件,無需用戶處理。
要想在程序中獲得並使用、設置中心窗口部件也很簡單,通過調用主窗口類的centralWidget()方法即可實現,它的函數原型如下:
QWidget * QMainWindow::centralWidget () const它將返回主窗口的中心窗口部件,如果中心窗口部件不存在,它將返回0。一個完整的示例代碼如下:
QTextEdit * text = centralWidget();//設置屬性,但通常不需要..