描述
QMdiArea
小部件提供了一個區(qū)域,用于顯示MDI窗口。QMdiArea
的功能類似于MDI窗口的窗口管理器。例如,它在自身上繪制和排列管理的窗口,可以按級聯(lián)或平鋪模式排列它們。通常,QMdiArea
被用作QMainWindow的中心小部件,用于創(chuàng)建MDI應用程序,但也可以放置在任何布局中。下面的代碼向主窗口添加了一個MDI區(qū)域:
QMainWindow *mainWindow = new QMainWindow;
mainWindow->setCentralWidget(mdiArea);
與頂級窗口的窗口管理器不同,QMdiArea支持所有窗口標志(Qt::WindowFlags),只要這些標志被當前小部件樣式支持。如果某個特定的標志在樣式中不受支持(如WindowShadeButtonHint),您仍然可以使用showShaded()來收起窗口。
以上這段話理解就是:
QMdiArea(一個Qt庫中的類,用于創(chuàng)建多文檔界面(MDI)應用程序的主窗口區(qū)域)支持所有的窗口標志(Qt::WindowFlags),但是這些標志是否能被正確使用還取決于當前窗口部件(Widget)的樣式是否支持這些標志。有些窗口標志可能在某些樣式中不被支持,比如“WindowShadeButtonHint”。“WindowShadeButtonHint”這個窗口標志是用來表示窗口是否有一個按鈕可以用來控制窗口的陰影效果的。但是,如果這個標志在當前使用的樣式中不被支持,也就是說,即使你設置了這個標志,你可能也看不到相應的陰影按鈕。
然而,盡管這個標志在樣式中不受支持,你仍然可以使用showShaded()函數(shù)來收起(或展開)窗口。也就是說,盡管你可能看不到陰影按鈕,但是你仍然可以通過代碼來控制窗口的陰影效果。
總的來說,這句話是在說明QMdiArea的窗口標志支持和樣式的關系,以及當某些標志不被樣式支持時的處理方式。
在QMdiArea
中,子窗口是QMdiSubWindow
的實例??梢允褂?code>addSubWindow()將它們添加到MDI區(qū)域中。通常,會將一個QWidget
作為內(nèi)部小部件傳遞給此函數(shù),但也可以直接傳遞一個QMdiSubWindow
。此類繼承自QWidget
,您可以像處理普通頂級窗口一樣使用相同的API進行編程。QMdiSubWindow
還具有特定于MDI窗口的行為。有關更多詳細信息,請參閱QMdiSubWindow
類描述。
當子窗口獲得鍵盤焦點或調(diào)用setFocus()
時,它將變?yōu)榛顒哟翱?。用戶可以通過通常的方法來激活窗口。當活動窗口更改時,MDI區(qū)域會發(fā)出subWindowActivated()
信號,activeSubWindow()
函數(shù)返回活動子窗口。
方便的函數(shù)subWindowList()
返回所有子窗口的列表。例如,這些信息可以用于彈出菜單中包含窗口列表的情況。
子窗口按當前的窗口順序進行排序。這用于subWindowList()
以及activateNextSubWindow()
和activatePreviousSubWindow()
,也用于使用cascadeSubWindows()
和tileSubWindows()
級聯(lián)或平鋪窗口的情況。
QMdiArea
提供了兩種內(nèi)置的子窗口布局策略:cascadeSubWindows()
和tileSubWindows()
。它們都是槽函數(shù),并且可以輕松地連接到菜單項。
常用函數(shù)
以下是QMdiArea的常用函數(shù)、信號和槽的介紹:
成員函數(shù)
-
addSubWindow(QWidget *widget, Qt::WindowFlags flags = Qt::EmptyFlag)
:將一個QWidget添加為子窗口,并返回對應的QMdiSubWindow實例。 -
removeSubWindow(QWidget *widget)
:從MDI區(qū)域中移除指定的子窗口。 -
setActiveSubWindow(QMdiSubWindow *window)
:將指定的QMdiSubWindow設置為活動窗口。 -
cascadeSubWindows()
:級聯(lián)排列所有子窗口。 -
tileSubWindows()
:平鋪排列所有子窗口。 -
subWindowList()
:返回包含所有子窗口的列表。 -
activeSubWindow()
:返回當前活動的子窗口。
信號
-
subWindowActivated(QMdiSubWindow *window)
:當活動窗口發(fā)生變化時觸發(fā)該信號,參數(shù)為當前活動的子窗口。 -
subWindowActivated(QWidget *window)
:重載版本的subWindowActivated信號,參數(shù)為當前活動的子窗口的內(nèi)部小部件。 -
subWindowAboutToActivate(QMdiSubWindow *window)
:在即將激活子窗口之前觸發(fā)該信號,參數(shù)為即將激活的子窗口。 -
subWindowAboutToActivate(QWidget *window)
:重載版本的subWindowAboutToActivate信號,參數(shù)為即將激活的子窗口的內(nèi)部小部件。
槽
-
cascadeSubWindows()
:槽函數(shù),用于級聯(lián)排列所有子窗口。 -
tileSubWindows()
:槽函數(shù),用于平鋪排列所有子窗口。 -
activateNextSubWindow()
:槽函數(shù),激活下一個子窗口。 -
activatePreviousSubWindow()
:槽函數(shù),激活上一個子窗口。
除了上述函數(shù)、信號和槽之外,QMdiArea還具有一些其他函數(shù)用于設置和查詢MDI區(qū)域的屬性,例如設置背景顏色、設置視圖模式、獲取焦點子窗口等。可以參考Qt官方文檔中的QMdiArea類文檔以獲取更詳細的信息和完整的函數(shù)、信號和槽列表。
示例
以下示例,實現(xiàn)使用QMdiArea實現(xiàn)添加子窗口、刪除子窗口、設置背景樣式和平鋪子窗口等功能:
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow mainWindow;
QMdiArea mdiArea;
mainWindow.setCentralWidget(&mdiArea);
// 設置背景樣式
mdiArea.setStyleSheet("background-color: #e9e9e9;");
// 添加子窗口
QWidget *subWindow1 = new QWidget;
subWindow1->setWindowTitle("SubWindow 1");
QLabel *label1 = new QLabel("This is SubWindow 1");
label1->setAlignment(Qt::AlignCenter);
QVBoxLayout *layout1 = new QVBoxLayout(subWindow1);
layout1->addWidget(label1);
mdiArea.addSubWindow(subWindow1);
QWidget *subWindow2 = new QWidget;
subWindow2->setWindowTitle("SubWindow 2");
QLabel *label2 = new QLabel("This is SubWindow 2");
label2->setAlignment(Qt::AlignCenter);
QVBoxLayout *layout2 = new QVBoxLayout(subWindow2);
layout2->addWidget(label2);
mdiArea.addSubWindow(subWindow2);
// 顯示主窗口和子窗口
mainWindow.show();
// 平鋪子窗口
mdiArea.tileSubWindows();
// 刪除子窗口
mdiArea.removeSubWindow(subWindow1);
return app.exec();
}
文章來源:http://www.zghlxwxcb.cn/news/detail-722251.html
在示例中,使用QMdiArea來創(chuàng)建一個MDI區(qū)域,并將其設置為主窗口的中心小部件。通過設置QMdiArea的樣式表來定制背景樣式。然后,使用QWidget來創(chuàng)建兩個子窗口,并將它們添加到MDI區(qū)域中使用addSubWindow()函數(shù)。最后,調(diào)用tileSubWindows()函數(shù)來平鋪子窗口,并在需要時使用removeSubWindow()函數(shù)來刪除子窗口。文章來源地址http://www.zghlxwxcb.cn/news/detail-722251.html
到了這里,關于【Qt控件之QMdiArea】介紹及使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!