一 窗口部件

基礎(chǔ)窗口部件QWidget類是所有用戶界面對象的基類,窗口和控件都是直接或間接繼承自 QWidget,下面我們來看一個很簡單的例子:

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

窗口部件(Widget)簡稱部件,是QT中建立界面的主要元素,QT中把沒有嵌入到其他部件部件成為窗口,一般的窗口都有邊框,標(biāo)題欄,窗口是指程序的整體界面,可以包含標(biāo)題欄、菜單欄、工具欄、關(guān)閉按鈕、最小化按鈕、最大化按鈕等;控件是指按鈕、復(fù)選框、文本框、表格、進(jìn)度條等這些組成程序的基本元素。一個程序可以有多個窗口,一個窗口也可以有多個控件。(但其實(shí)控件有時候就是窗口)

以上demo的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "dialog.h"
#include <QApplication>
#include <QtWidgets>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QWidget *widget=new QWidget();
    //新建QWidget類對象,默認(rèn)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:我不是獨(dú)立窗口,只是widget的子部件"));
 
    label2->resize(250,20);
    label->show();
    widget->show();
    int ret =a.exec();
    delete label;
    delete widget;
    return ret;
}

 二 窗口類型

QWidget的構(gòu)造函數(shù)中有兩個參數(shù):QWidget* parent=0 和 Qt::WidowFlags f=0,前面的parent指的是父窗口部件,默認(rèn)為哦,表明沒有父窗口,而后面的f參數(shù)是Qt::WindowFlags類型,是Qt::WindowType枚舉類型值或者組合。0表示Qt::Widget,默認(rèn)的類型。

QMainWindow、QWidget、QDialog 三個類就是用來創(chuàng)建窗口的,可以直接使用也可以繼承后再使用。

QMainWindow 窗口可以包含菜單欄、工具欄、狀態(tài)欄、標(biāo)題欄等,是最常見的窗口形式,可以作為GUI程序的主窗口。如下圖所示:



QDialog 是對話框窗口的基類。對話框主要用來執(zhí)行短期任務(wù),或與用戶進(jìn)行互動,它可以是模態(tài)的也可以是非模態(tài)的。QDialog 沒有菜單欄、工具欄、狀態(tài)欄等,如下所示:


如果是主窗口,就使用 QMainWindow;如果是對話框,就是用 QDialog;如果不確定,或有可能作為頂級窗口,也有可能嵌入到其他窗口中,那么使用 QWidget。

需要注意的是,窗口和控件都繼承自 QWidget,如果不為控件指定父對象,它就會被作為窗口處理,這時 setWindowTitle() 和 setWindowIcon() 函數(shù)就會生效。請看下面的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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();
}

運(yùn)行代碼,會在距離顯示器 x=100, y=50 的位置彈出兩個窗口,如下圖所示:


可以發(fā)現(xiàn),窗口和控件沒有絕對的區(qū)別,控件也可以成為窗口,這取決于它有沒有父對象。

 

感謝您的閱讀,若有不足之處,歡迎指教,共同學(xué)習(xí)、共同進(jìn)步。 博主網(wǎng)址:http://www.cnblogs.com/majianchao/ 如您喜歡,麻煩推薦一下;如您有新想法,歡迎提出,郵箱:1145356699@qq.com。 本博客為博主原創(chuàng),歡迎轉(zhuǎn)載,但必須注明博客來源。 更多關(guān)于游戲開發(fā)的內(nèi)容也可關(guān)注微信公眾號:微浪游戲

標(biāo)簽: QT

好文要頂 關(guān)注我 收藏該文 移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn) 移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

若朝若曦
關(guān)注 - 1
粉絲 - 65

+加關(guān)注

1

0

上一篇:QT Creator 快速入門教程 讀書筆記(一)

posted @ 2017-03-23 08:56 若朝若曦 閱讀(194) 評論(2編輯 收藏


評論列表

  

#1樓 2017-03-23 09:30 fhhdd  

如下乳所示,哈哈哈哈

支持(0)反對(0)

  

#2樓[樓主2017-03-23 09:54 若朝若曦  

@ fhhdd
我嚓,趕緊改過來!

支持(0)反對(0)

刷新評論刷新頁面返回頂部

注冊用戶登錄后才能發(fā)表評論,請 登錄 或 注冊,訪問網(wǎng)站首頁。

【推薦】50萬行VC++源碼: 大型組態(tài)工控、電力仿真CAD與GIS源碼庫
【招募】2017云棲大會深圳峰會火熱報名中
【推薦】阿里云云盾幫您解讀WAF防護(hù)功能

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)