基礎窗口部件QWidget類是全部用戶界面對象的基類,窗口和控件都是直接或間接繼承自 QWidget,下面咱們來看一個很簡單的例子:app
窗口部件(Widget)簡稱部件,是QT中創建界面的主要元素,QT中把沒有嵌入到其餘部件部件成爲窗口,通常的窗口都有邊框,標題欄,窗口是指程序的總體界面,能夠包含標題欄、菜單欄、工具欄、關閉按鈕、最小化按鈕、最大化按鈕等;控件是指按鈕、複選框、文本框、表格、進度條等這些組成程序的基本元素。一個程序能夠有多個窗口,一個窗口也能夠有多個控件。(但其實控件有時候就是窗口)函數
以上demo的代碼:工具
#include "dialog.h" #include <QApplication> #include <QtWidgets> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *widget=new QWidget(); //新建QWidget類對象,默認parent是0,因此它是個窗口。 widget->setWindowTitle(QObject::tr("我是widget")); QLabel *label=new QLabel(); label->setWindowTitle(QObject::tr("我是label")); label->setText(QObject::tr("label:我是個窗口")); label->resize(180,20); //指定了父窗口爲widget,因此不是窗口 QLabel *label2=new QLabel(widget); label2->setText(QObject::tr("label2:我不是獨立窗口,只是widget的子部件")); label2->resize(250,20); label->show(); widget->show(); int ret =a.exec(); delete label; delete widget; return ret; }
QWidget的構造函數中有兩個參數:QWidget* parent=0 和 Qt::WidowFlags f=0,前面的parent指的是父窗口部件,默認爲哦,代表沒有父窗口,然後面的f參數是Qt::WindowFlags類型,是Qt::WindowType枚舉類型值或者組合。0表示Qt::Widget,默認的類型。spa
QMainWindow、QWidget、QDialog 三個類就是用來建立窗口的,能夠直接使用也能夠繼承後再使用。
QMainWindow 窗口能夠包含菜單欄、工具欄、狀態欄、標題欄等,是最多見的窗口形式,能夠做爲GUI程序的主窗口。以下圖所示:對象
QDialog 是對話框窗口的基類。對話框主要用來執行短時間任務,或與用戶進行互動,它能夠是模態的也能夠是非模態的。QDialog 沒有菜單欄、工具欄、狀態欄等,以下所示:blog
若是是主窗口,就使用 QMainWindow;若是是對話框,就是用 QDialog;若是不肯定,或有可能做爲頂級窗口,也有可能嵌入到其餘窗口中,那麼使用 QWidget。
須要注意的是,窗口和控件都繼承自 QWidget,若是不爲控件指定父對象,它就會被做爲窗口處理,這時 setWindowTitle() 和 setWindowIcon() 函數就會生效。請看下面的代碼:繼承
#include <QApplication> #include <QLabel> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label("這是Label控件"); //沒有父對象 label.setWindowTitle("Label控件做爲頂級窗口"); label.setGeometry(100, 50, 360, 160); label.setAlignment(Qt::AlignCenter); label.show(); QPushButton btn; //沒有父對象 btn.setWindowTitle("PushButton控件做爲頂級窗口"); btn.setText("這是個大大的按鈕"); btn.setGeometry(480, 50, 360, 160); btn.show(); return app.exec(); }
運行代碼,會在距離顯示器 x=100, y=50 的位置彈出兩個窗口,以下圖所示:
能夠發現,窗口和控件沒有絕對的區別,控件也能夠成爲窗口,這取決於它有沒有父對象。get