解析QT Widget應用
QT Widget應用是本文要介紹的內(nèi)容,主要是來了解并學習QT Widget應用,具體內(nèi)容的學習來看本文詳解。
Widget 是使用 Qt 編寫的圖形用戶界面 (GUI) 應用程序的基本生成塊。每個 GUI 組件,如按鈕、標簽或文本編輯器,都是一個 widget ,并可以放置在現(xiàn)有的用戶界面中或作為單獨的窗口顯示。每種類型的組件都是由 QWidget 的特殊子類提供的,而 QWidget 自身又是 QObject 的子類。
QWidget 不是一個抽象類;它可用作其他 widget 的容器,并很容易作為子類使用來創(chuàng)建定制 widget。它經(jīng)常用來創(chuàng)建放置其他 widget 的窗口。
至于 QObject,可使用父對象創(chuàng)建 widget 以表明其所屬關(guān)系,這可確保刪除不再使用的對象。使用 widget,這些父子關(guān)系就有了更多的意義:每個子類都顯示在其父級所擁有的屏幕區(qū)域內(nèi)。也就是說,當刪除窗口時,其包含的所有 widget 也都自動刪除。
創(chuàng)建窗口
如果 widget 未使用父級進行創(chuàng)建,則在顯示時視為窗口或頂層 widget。由于頂層 widget 沒有父級對象類來確保在其不再使用時就刪除,因此需要開發(fā)人員在應用程序中對其進行跟蹤。
在下例中,我們使用 QWidget 創(chuàng)建和顯示具有默認大小的窗口:
- QWidget *window = new QWidget();
- window->resize(320, 240);
- window->show();
我們可以通過將 window 作為父級傳遞給其構(gòu)造器來向窗口添加子 widget。在這種情況下,我們向窗口添加按鈕并將其放置在特定位置:
- QPushButton *button = new QPushButton(tr("Press me"), window);
- button->move(100, 100);
- button->show();
該按鈕現(xiàn)在為窗口的子項,并在刪除窗口時一同刪除。請注意,隱藏或關(guān)閉窗口不會自動刪除該按鈕。
使用布局
通常,子 widget 是通過使用布局對象在窗口中進行排列,而不是通過指定位置和大小進行排列。在此處,我們構(gòu)造要并排排列的標簽和行編輯框 widget。
- QLabel *label = new QLabel(tr("Name:"));
- QLineEdit *lineEdit = new QLineEdit();
- QHBoxLayout *layout = new QHBoxLayout();
- layout->addWidget(label);
- layout->addWidget(lineEdit);
- window->setLayout(layout);
我們構(gòu)造的布局對象管理通過 addWidget() 函數(shù)提供的 widget 的位置和大小。布局本身是通過調(diào)用 setLayout() 提供給窗口的。布局僅可通過其對所管理的 widget(和其他布局)的效果才可顯示。
在上文示例中,每個 widget 的所屬關(guān)系并不明顯。由于我們未使用父級對象構(gòu)造 widget 和布局,我們會看到一個空窗口和兩個包含了標簽與行編輯框的窗口。不過,如果我們告知布局來管理標簽和行編輯框,并在窗口中設(shè)置布局,兩個 widget 與布局本身就都會成為窗口的子項。
由于 widget 可包含其他 widget,布局可用來提供按不同層次分組的 widget。這里,我們要在顯示查詢結(jié)果的表視圖上方、窗口頂部的行編輯框旁,顯示一個標簽。
- QLabel *queryLabel = new QLabel(tr("Query:"));
- QLineEdit *queryEdit = new QLineEdit();
- QTableView *resultView = new QTableView();
- QHBoxLayout *queryLayout = new QHBoxLayout();
- queryLayout->addWidget(queryLabel);
- queryLayout->addWidget(queryEdit);
- QVBoxLayout *mainLayout = new QVBoxLayout();
- mainLayout->addLayout(queryLayout);
- mainLayout->addWidget(resultView);
- window->setLayout(mainLayout);
除了 QHBoxLayout 和 QVBoxLayout,Qt 還提供了 QGridLayout 和 QFormLayout 類來協(xié)助實現(xiàn)更復雜的用戶界面。
小結(jié):解析QT Widget應用的內(nèi)容介紹完了,希望通過QT Widget內(nèi)容的學習能對你有所幫助!