版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第第3 3章章 窗口部件窗口部件n3.1 基礎窗口部件基礎窗口部件QWidgetn3.2 對話框對話框QDialogn3.3 其他窗口部件其他窗口部件n3.4 小結小結2 前一章中第一次建立前一章中第一次建立helloworldhelloworld程序時,曾看到程序時,曾看到Qt CreatorQt Creator提供的默認基類提供的默認基類只有只有QMainWindowQMainWindow、QWidgetQWidget和和QDialogQDialog三種。三種。1 1)QMainWindowQMainWindow是帶有菜單欄和工具欄的主窗口類,是帶有菜單欄和工具欄的主窗口類,2) 2)
2、QDialogQDialog是各種對話框的基類,而它們二者全部繼承自是各種對話框的基類,而它們二者全部繼承自QWidgetQWidget。不僅如。不僅如此,其實所有的窗口部件都繼承自此,其實所有的窗口部件都繼承自QWidgetQWidget。33.1 基礎窗口部件基礎窗口部件QWidgetnQWidgetQWidget類是所有用戶界面對象的基類,被稱為基礎窗口類是所有用戶界面對象的基類,被稱為基礎窗口部件。部件。QWidgetQWidget繼承自繼承自QObjectQObject類和類和QPaintDeviceQPaintDevice類類。 QObjectQObject是所有支持是所有支持Qt
3、Qt對象模型(對象模型(Qt Object ModelQt Object Model)的)的QtQt對象的基類對象的基類 QPaintDeviceQPaintDevice是所有可以繪制的對象的基類。是所有可以繪制的對象的基類。本節(jié)內容:本節(jié)內容:n窗口、子部件以及窗口類型窗口、子部件以及窗口類型n窗口幾何布局窗口幾何布局 n程序調試程序調試 4窗口、子部件以及窗口類型窗口、子部件以及窗口類型 / 新建新建QWidget類對象,默認類對象,默認parent參數(shù)是參數(shù)是0,所以它是個窗口,所以它是個窗口 QWidget *widget = new QWidget(); / 設置窗口標題設置窗口標題
4、 widget-setWindowTitle(QObject:tr(我是我是widget); / 新建新建QLabel對象,默認對象,默認parent參數(shù)是參數(shù)是0,所以它是個窗口,所以它是個窗口 QLabel *label = new QLabel(); label-setWindowTitle(QObject:tr(我是我是label); / 設置要顯示的信息設置要顯示的信息 label-setText(QObject:tr(label:我是個窗口我是個窗口); / 改變部件大小,以便能顯示出完整的內容改變部件大小,以便能顯示出完整的內容 label-resize(180, 20); /
5、label2指定了父窗口為指定了父窗口為widget,所以不是窗口,所以不是窗口 QLabel *label2 = new QLabel(widget); label2-setText(QObject:tr(label2:我不是獨立窗口,只是我不是獨立窗口,只是widget的子部件的子部件); label2-resize(250, 20); / 在屏幕上顯示出來在屏幕上顯示出來 label-show(); widget-show();5n在程序中定義了一個在程序中定義了一個QWidget類對象的指針類對象的指針widget和兩個和兩個QLabel對象指針對象指針label與與label2,其中
6、,其中l(wèi)abel沒有父窗口,而沒有父窗口,而label2在在widget中,中,widget是其父是其父窗口。窗口。 n窗口部件窗口部件(Widget)這里簡稱部件,是)這里簡稱部件,是Qt中建立用戶界面的主要元中建立用戶界面的主要元素。像主窗口、對話框、標簽、還有以后要介紹到的按鈕、文本輸入素。像主窗口、對話框、標簽、還有以后要介紹到的按鈕、文本輸入框等都是窗口部件??虻榷际谴翱诓考?。n在在Qt中,把沒有嵌入到其他部件中的部件稱為中,把沒有嵌入到其他部件中的部件稱為窗口窗口,一般的,窗口都,一般的,窗口都有邊框和標題欄,就像程序中的有邊框和標題欄,就像程序中的widget和和label一樣。
7、一樣。nQMainWindow和大量的和大量的QDialog子類是最一般的窗口類型。窗口就子類是最一般的窗口類型。窗口就是沒有父部件的部件,所以又稱為是沒有父部件的部件,所以又稱為頂級部件頂級部件(top-level widget)。)。與其相對的是非窗口部件,又稱為與其相對的是非窗口部件,又稱為子部件子部件(child widget)。在)。在Qt中中大部分部件被用作子部件,它們嵌入在別的窗口中,例如程序中的大部分部件被用作子部件,它們嵌入在別的窗口中,例如程序中的label2。 6窗口類型窗口類型 前面講到窗口一般都有邊框和標題欄,前面講到窗口一般都有邊框和標題欄,但但不是必需的:不是必需
8、的:nQWidgetQWidget的構造函數(shù)有兩個參數(shù):的構造函數(shù)有兩個參數(shù):QWidget QWidget * * parent = 0 parent = 0和和Qt:WindowFlags f = 0Qt:WindowFlags f = 0; 前面的前面的parentparent就是指父窗口部件,默認值為就是指父窗口部件,默認值為0 0,表明沒有父窗口;,表明沒有父窗口; 而后面的而后面的f f參數(shù)是參數(shù)是Qt:WindowFlagsQt:WindowFlags類型的,它是一個枚舉類型,分為類型的,它是一個枚舉類型,分為窗口類型(窗口類型(WindowTypeWindowType)和窗口標
9、志()和窗口標志(WindowFlagsWindowFlags。前者可以定義。前者可以定義窗口的類型,比如我們這里窗口的類型,比如我們這里f=0f=0,表明使用了,表明使用了Qt:WidgetQt:Widget一項,這是一項,這是QWidgetQWidget的默認類型,這種類型的部件如果有父窗口,那么它就是子的默認類型,這種類型的部件如果有父窗口,那么它就是子部件,否則就是獨立的窗口。部件,否則就是獨立的窗口。7 例如:使用其中的例如:使用其中的Qt:Dialog和和Qt:SplashScreen,更改程序中的新建對象,更改程序中的新建對象的那兩行代碼:的那兩行代碼:QWidget *widg
10、et = new QWidget(0, Qt:Dialog);QLabel *label = new QLabel(0, Qt:SplashScreen); 更改后,窗口的樣式發(fā)生了改變,一個是對話框類型,一個是歡迎窗口類型。更改后,窗口的樣式發(fā)生了改變,一個是對話框類型,一個是歡迎窗口類型。 再次更改那兩行代碼:再次更改那兩行代碼:QWidget *widget = new QWidget(0, Qt:Dialog | Qt:FramelessWindowHint);QLabel *label = new QLabel(0, Qt:SplashScreen | Qt:WindowStaysO
11、nTopHint);Qt:FramelessWindowHint用來產(chǎn)生一個沒有邊框的窗口用來產(chǎn)生一個沒有邊框的窗口Qt:WindowStaysOnTopHint用來使該窗口停留在所有其它窗口上面。用來使該窗口停留在所有其它窗口上面。8窗口幾何布局 對于窗口的大小和位置,根據(jù)是否包含邊框和標題欄兩種情況,要用不同的函數(shù)來獲對于窗口的大小和位置,根據(jù)是否包含邊框和標題欄兩種情況,要用不同的函數(shù)來獲取它們的數(shù)值。取它們的數(shù)值。 這里的函數(shù)分為兩類,一類是包含框架的,一類是不包含框架的:這里的函數(shù)分為兩類,一類是包含框架的,一類是不包含框架的:n包含框架:包含框架:x()、y()、frameGeom
12、etry()、pos()和和move()等函數(shù);等函數(shù);n不包含框架:不包含框架:geometry()、width()、height()、rect()和和size()等函數(shù)。等函數(shù)。9程序調試程序調試下面在講解窗口幾何布局的幾個函數(shù)的同時,講解一下程序調試方面的內容。 將主函數(shù)內容更改如下:將主函數(shù)內容更改如下:#include #include #include #include int main(int argc, char int main(int argc, char * *argv)argv) QApplication a(argc, argv); QApplication a(ar
13、gc, argv); QWidget widget; QWidget widget; int x = widget.x(); int x = widget.x(); int y = widget.y(); int y = widget.y(); QRect geometry = widget.geometry(); QRect geometry = widget.geometry(); QRect frame = widget.frameGeometry(); QRect frame = widget.frameGeometry(); return a.exec(); return a.exe
14、c(); x()x()、y()y()分別返回部件的位置坐標的分別返回部件的位置坐標的x x、y y值,它們的默認值為值,它們的默認值為0 0。而而geometry()geometry()和和frameGeometry()frameGeometry()函函數(shù)分別返回沒有邊框和包含邊框的窗數(shù)分別返回沒有邊框和包含邊框的窗口框架矩形的值,其返回值是口框架矩形的值,其返回值是QRectQRect類型的,就是一個矩形,它的形式是類型的,就是一個矩形,它的形式是(位置坐標,大小信息),也就是(位置坐標,大小信息),也就是(x x,y y,寬,高)。,寬,高)。10 下面在下面在int x = widget
15、.x(); int x = widget.x(); 一行代碼的標號前面點擊鼠一行代碼的標號前面點擊鼠標左鍵來設置斷點。標左鍵來設置斷點。 所謂所謂斷點斷點,就是程序運行到該行代碼時會暫停下來,從而,就是程序運行到該行代碼時會暫停下來,從而可以查看一些信息,如變量值等??梢圆榭匆恍┬畔ⅲ缱兞恐档?。 要取消斷點,只要在那個斷點上再點擊一下就可以了。設要取消斷點,只要在那個斷點上再點擊一下就可以了。設置好斷點后便可以按下置好斷點后便可以按下F5F5或者左下角的調試按鈕開始調試。或者左下角的調試按鈕開始調試。 在程序構建時可能會出現(xiàn)警告,那是因為我們定義了變量在程序構建時可能會出現(xiàn)警告,那是因為我們
16、定義了變量卻沒有使用造成的,不用管它。卻沒有使用造成的,不用管它。 11調試模式12下面對調試模式的幾個按鈕和窗口進行簡單介紹:下面對調試模式的幾個按鈕和窗口進行簡單介紹:繼續(xù)按鈕。程序在斷點處停了下來,按下繼續(xù)按鈕后,程繼續(xù)按鈕。程序在斷點處停了下來,按下繼續(xù)按鈕后,程序便會像正常運行一樣,執(zhí)行后面的代碼,直到遇到下一序便會像正常運行一樣,執(zhí)行后面的代碼,直到遇到下一個斷點,或者程序結束。個斷點,或者程序結束。停止調試按鈕。按下該按鈕后結束調試。停止調試按鈕。按下該按鈕后結束調試。單步跳過按鈕。直接執(zhí)行本行代碼,然后指向下一行代碼。單步跳過按鈕。直接執(zhí)行本行代碼,然后指向下一行代碼。單步進入
17、按鈕。進入調用的函數(shù)內部。單步進入按鈕。進入調用的函數(shù)內部。單步跳出按鈕。當進入函數(shù)內部時,跳出該函數(shù),一般與單步跳出按鈕。當進入函數(shù)內部時,跳出該函數(shù),一般與單步進入配合使用。單步進入配合使用。13n從變量監(jiān)視器中可以看到從變量監(jiān)視器中可以看到x x、y y、geometrygeometry和和frameframe四個變量初始值都四個變量初始值都是一個隨機未知數(shù)。等到調試完成后,是一個隨機未知數(shù)。等到調試完成后,x x、y y的值均為的值均為0 0,這是它們的,這是它們的默認值。而默認值。而geometrygeometry的值為的值為640 x480+0+0640 x480+0+0,fram
18、eframe的值為的值為639x479+0+0639x479+0+0。n現(xiàn)在對這些值還不是很清楚,不過,為什么現(xiàn)在對這些值還不是很清楚,不過,為什么x、y的值會是的值會是0呢?我們呢?我們可能會想到,應該是窗口沒有顯示的原因,那么就更改代碼,讓窗口可能會想到,應該是窗口沒有顯示的原因,那么就更改代碼,讓窗口先顯示出來,再看這些值。在先顯示出來,再看這些值。在QWidget widget;一行代碼后添加一行一行代碼后添加一行代碼:代碼: widget.show();n注意:注意:widget.show();不能加在不能加在widget.frameGeometry()widget.frameGeo
19、metry()之后,否則之后,否則值還是不變。值還是不變。程序調試程序調試14使用使用qDebug()qDebug()函數(shù)函數(shù) 一在程序調試過程中一在程序調試過程中也也常用常用qDebug()qDebug()函數(shù),它可以將調試信息直接函數(shù),它可以將調試信息直接輸出到控制臺,在輸出到控制臺,在Qt CreatorQt Creator中是輸出到應用程序輸出欄中是輸出到應用程序輸出欄 。例如:。例如: QWidget widget; QWidget widget; widget.resize(400, 300); / widget.resize(400, 300); / 設置窗口大小設置窗口大小 w
20、idget.move(200, 100); / widget.move(200, 100); / 設置窗口位置設置窗口位置 widget.show(); widget.show(); int x = widget.x(); int x = widget.x(); qDebug(x: %d, x); / qDebug(x: %d, x); / 輸出輸出x x的值的值 int y = widget.y(); int y = widget.y(); qDebug(y: %d, y); qDebug(y: %d, y); QRect geometry = widget.geometry(); QRec
21、t geometry = widget.geometry(); QRect frame = widget.frameGeometry(); QRect frame = widget.frameGeometry(); qDebug() geometry: geometry frame: frame; qDebug() geometry: geometry frame: frame;15 這里使用了兩種輸出方式:這里使用了兩種輸出方式:n方式一:直接將字符串當做參數(shù)傳給方式一:直接將字符串當做參數(shù)傳給qDebug()函數(shù),例如上面使用函數(shù),例如上面使用這種方法輸出這種方法輸出x和和y的值的值(不需
22、要不需要頭文件頭文件)。n方式二:使用輸出流的方式一次輸出多個值,它們的類型可以不同,方式二:使用輸出流的方式一次輸出多個值,它們的類型可以不同,例如程序中輸出例如程序中輸出geometry和和frame的值的值(需要需要頭文件頭文件)。n說明說明:因為第一種方法很麻煩,所以因為第一種方法很麻煩,所以經(jīng)常使用的是第二種方法經(jīng)常使用的是第二種方法。n從輸出信息中,可以清楚的看到幾個函數(shù)的含義了。從輸出信息中,可以清楚的看到幾個函數(shù)的含義了。 16nqDebug()qDebug()函數(shù)的第二種方法時還可以讓輸出自動換行。在函數(shù)的第二種方法時還可以讓輸出自動換行。在return a.exec();r
23、eturn a.exec();一行代碼前添加如下代碼:一行代碼前添加如下代碼:qDebug() pos: widget.pos() endl rect: widget.rect()qDebug() pos: widget.pos() endl rect: widget.rect() endl size: widget.size() endl width: endl size: widget.size() endl width: widget.width() endl height: widget.height(); widget.width() endl height: show();n在my
24、widget.cpp文件的MyWidget類的構造函數(shù)中使用connect()關聯(lián)按鈕單擊信號和自定義的槽如下:connect(ui-showChildButton, SIGNAL(clicked(), this, SLOT(showChildDialog();23說明:n這里自定義了一個槽,槽必須聲明為這里自定義了一個槽,槽必須聲明為slots,這里使用了,這里使用了public slots,表明這個槽可以在類外被調用。,表明這個槽可以在類外被調用。 nclicked()信號在信號在QPushButton類中進行了定義,而類中進行了定義,而connect()是是QObject類中的函數(shù),因為
25、我們的類繼承自類中的函數(shù),因為我們的類繼承自QObject,所以可以直接使用它。,所以可以直接使用它。 nconnect()函數(shù)中的四個參數(shù)分別是:發(fā)送信號的對象、函數(shù)中的四個參數(shù)分別是:發(fā)送信號的對象、發(fā)送的信號、接收信號的對象和要執(zhí)行的槽,而信號和槽發(fā)送的信號、接收信號的對象和要執(zhí)行的槽,而信號和槽要分別使用要分別使用SIGNAL()和和SLOT()宏括起來。宏括起來。 24模態(tài)和非模態(tài)對話框模態(tài)和非模態(tài)對話框n模態(tài)模態(tài)對話框就是在我們沒有關閉它之前,不能再與同一個應用程序的其他窗對話框就是在我們沒有關閉它之前,不能再與同一個應用程序的其他窗口進行交互,比如新建項目時彈出的對話框。要想使一
26、個對話框成為模態(tài)對口進行交互,比如新建項目時彈出的對話框。要想使一個對話框成為模態(tài)對話框,只需要調用它的話框,只需要調用它的exec()exec()函數(shù):函數(shù):QDialog dialog(this);QDialog dialog(this);dialog.exec();dialog.exec();n而對于而對于非模態(tài)非模態(tài)對話框,既可以與它交互,也可以與同一程序中的其他窗口交對話框,既可以與它交互,也可以與同一程序中的其他窗口交互,例如互,例如Microsoft WordMicrosoft Word中的查找替換對話框。要使一個對話框成為非模態(tài)中的查找替換對話框。要使一個對話框成為非模態(tài)對話框
27、,我們就可以使用對話框,我們就可以使用newnew操作來創(chuàng)建,然后使用操作來創(chuàng)建,然后使用show()show()函數(shù)來顯示。函數(shù)來顯示。 QDialog QDialog * *dialog = new QDialog(this);dialog = new QDialog(this);dialog-show();dialog-show();25 使用使用show()show()函數(shù)也可以建立模態(tài)對話框,只需在其前面使用函數(shù)也可以建立模態(tài)對話框,只需在其前面使用setModal()setModal()函數(shù)函數(shù)即可。例如:即可。例如:QDialog QDialog * *dialog = new
28、QDialog(this);dialog = new QDialog(this);dialog-setModal(true);dialog-setModal(true);dialog-show();dialog-show();現(xiàn)在運行程序,可以看到生成的對話框是模態(tài)的。但是,它與用現(xiàn)在運行程序,可以看到生成的對話框是模態(tài)的。但是,它與用exec()exec()函數(shù)函數(shù)時的效果是不一樣的。這是因為調用完時的效果是不一樣的。這是因為調用完show()show()函數(shù)后會立即將控制權交給調函數(shù)后會立即將控制權交給調用者,那么程序可以繼續(xù)往下執(zhí)行。而調用用者,那么程序可以繼續(xù)往下執(zhí)行。而調用exec(
29、)exec()函數(shù)卻不是這樣,它只有函數(shù)卻不是這樣,它只有當對話框被關閉時才會返回。當對話框被關閉時才會返回。 與與setModal()setModal()函數(shù)相似的還有一個函數(shù)相似的還有一個setWindowModality()setWindowModality()函數(shù),它有一個參函數(shù),它有一個參數(shù)來設置模態(tài)對話框要阻塞的窗口類型,可以是:數(shù)來設置模態(tài)對話框要阻塞的窗口類型,可以是:nQt:NonModalQt:NonModal(不阻塞任何窗口,就是非模態(tài)),(不阻塞任何窗口,就是非模態(tài)),nQt:WindowModalQt:WindowModal(阻塞它的父窗口和所有祖先窗口以及它們的子窗
30、口),(阻塞它的父窗口和所有祖先窗口以及它們的子窗口),nQt:ApplicationModalQt:ApplicationModal(阻塞整個應用程序的所有窗口)。(阻塞整個應用程序的所有窗口)。 而而setModal()setModal()函數(shù)默認設置的是函數(shù)默認設置的是Qt:ApplicationModalQt:ApplicationModal。26標準對話框標準對話框 Qt Qt提供了一些常用的對話框類型,它們全部繼承自提供了一些常用的對話框類型,它們全部繼承自QDialogQDialog類,并增加了自類,并增加了自己的特色功能,比如獲取顏色、顯示特定信息等。己的特色功能,比如獲取顏色
31、、顯示特定信息等。 n顏色對話框顏色對話框 n文件對話框文件對話框 n字體對話框字體對話框 n輸入對話框輸入對話框 n消息對話框消息對話框 n進度對話框進度對話框 n錯誤信息對話框錯誤信息對話框 n向導對話框向導對話框 27標準對話框:28標準文件對話框getOpenFileName()函數(shù)返回用戶選擇的文件名。但是當用戶在選擇文件時,如果選擇“取消”(Cancel),則返回一個空串。在此只詳細說明getOpenFileName()靜態(tài)函數(shù)各個參數(shù)的作用,其他文件對話框類中相關的靜態(tài)函數(shù)的參數(shù)有與其類似之處。其函數(shù)形式如下:QString QFileDialog:getOpenFileName
32、(QWidget* parent=0, /標準文件對話框的父窗口const QString & caption=QString(),/標準文件對話框的標題名const QString & dir=QString(), /注(1)const QString & filter=QString(),/注(2)QString * selectedFilter=0, /用戶選擇的過濾器通過此參數(shù)返回Options options=0 /選擇顯示文件名的格式,默認是同時顯示目錄與文件名)29 QString s = QFileDialog:getOpenFileName(this,
33、open file dialog,/, C+ files(*.cpp):C files(*.c):Head files(*.h); fileLineEdit-setText(s);添加頭文件:#include標準文件對話框30顏色對話框例如:例如:QColor color = QColorDialog:getColor(Qt:red, this, tr(QColor color = QColorDialog:getColor(Qt:red, this, tr(顏色對話框顏色對話框););qDebug() color: color;qDebug() color: color; 這里使用了這里使用
34、了QColorDialog的靜態(tài)函數(shù)的靜態(tài)函數(shù)getColor()來獲取顏色,它的三個參數(shù)來獲取顏色,它的三個參數(shù)的作用分別是:設置初始顏色、父窗口和對話框標題。這里的的作用分別是:設置初始顏色、父窗口和對話框標題。這里的Qt:red,是,是Qt預定義的顏色對象。預定義的顏色對象。n如果想要更靈活的設置時,可以先創(chuàng)建對象,然后進行各項設置:如果想要更靈活的設置時,可以先創(chuàng)建對象,然后進行各項設置:void MyWidget:on_pushButton_clicked() QColorDialog dialog(Qt:red,this); / 創(chuàng)建對象創(chuàng)建對象 dialog.setOption(
35、QColorDialog:ShowAlphaChannel); / 顯示顯示alpha選項選項 dialog.exec(); / 以模態(tài)方式運行對話框以模態(tài)方式運行對話框 QColor color = dialog.currentColor(); / 獲取當前顏色獲取當前顏色 qDebug()color:setFont(f); 32自學內容: 自學其他標準對話框的使用。33程序啟動畫面(QSplashScreen)當運行程序時,在顯示屏的中央出現(xiàn)一個啟動畫面,經(jīng)過一段時間,應用程序完成初始化工作后,啟動畫面隱去,出現(xiàn)程序的主窗口界面。(4) 啟動畫面主要在main()函數(shù)中實現(xiàn),添加以下加黑代
36、碼:#include #include int main(int argc, char *argv) QApplication a(argc, argv); QPixmap pixmap(:/res/myShow.jpg); QSplashScreen splash(pixmap); splash.show(); cessEvents(); MainWindow w; w.show(); splash.finish(&w); return a.exec();342021-9-3下面通過實現(xiàn)類似QQ抽屜效果來介紹QToolBox類的使用,QToolBox提供了一種列狀的層疊窗體
37、,而QToolButton提供了一種快速訪問命令或選擇項的按鈕,通常在工具條中使用。運行效果如圖所示。 QToolBox類352021-9-3(1) 建立一個空工程。單擊“File”-“New File or Project.”,在彈出的對話框中選擇Projects組下的“Empty Qt4 Project”,單擊“OK”按鈕。(2) 在彈出的對話框中對該工程進行命名并選擇保存的路徑,這里命名為 “MyQQExample”。單擊“Next”按鈕,最后單擊“Finish”按鈕,完成該文件工程的建立。(3) 下面添加該工程的提供主要顯示界面的函數(shù)所在的文件,在“MyQQExample”項目名上單擊
38、鼠標右鍵,在彈出的快捷菜單中選擇“Add New.”菜單項,在彈出的對話框中選擇“C+ Class”選項。單擊“OK”按鈕,彈出“C+ Class Wizard”對話框,在Base class后面的下拉列表框中輸入基類名“QToolBox”(手工添加),在Class name后面的文本框中輸入類的名稱“Drawer”。(4) 單擊“Next”按鈕,單擊“Finish”按鈕,添加drawer.h頭文件和drawer.cpp源文件。創(chuàng)建步驟362021-9-3(4) Drawer類繼承自QToolBox類,打開“drawer.h”頭文件,定義實例中需要用到的各種窗體控件。具體代碼如下:#inclu
39、de #include class Drawer : public QToolBoxQ_OBJECT public:Drawer(QWidget *parent=0,Qt:WindowFlags f=0); private:QToolButton *toolBtn1_1;QToolButton *toolBtn1_2;QToolButton *toolBtn1_3;QToolButton *toolBtn1_4;QToolButton *toolBtn1_4;QToolButton *toolBtn2_1;QToolButton *toolBtn2_2;QToolButton *toolBtn
40、3_1;QToolButton *toolBtn3_2;創(chuàng)建步驟372021-9-3(6) 打開“drawer.cpp”文件,添加代碼。(7) 在“drawer.cpp”文件一開始加入以下頭文件:#include #include (8) 下面添加該工程的入口函數(shù)所在的文件(main.cpp文件),在“MyQQExample”項目名上單擊鼠標右鍵,在彈出的快捷菜單中選擇“Add New.”菜單項,在彈出的對話框中選擇“C+ Source File”選項,單擊“OK”按鈕,彈出“New C+ Source File”對話框,在name后面的文本框中輸入“main.cpp”。單擊“Next”按鈕,
41、單擊“Finish”按鈕,添加main函數(shù)。創(chuàng)建步驟382021-9-3(9) 打開“main.cpp”文件,添加以下代碼:#include #include drawer.h#include int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); /顯示中文 Drawer drawer; drawer.show(); return a.exec();(10) 編譯運行此程序,此時未看到加載的圖片,是因為圖片放置的路徑不是默認
42、的,只要將所用到的圖片放置到該工程下的debug文件夾下即可。最后運行一下程序,顯示效果如圖所示。創(chuàng)建步驟393.3 其他窗口部件其他窗口部件QtQt提供了一些常用的窗口部件:提供了一些常用的窗口部件:nQFrameQFrame類族類族 n按鈕部件按鈕部件 n行編輯器行編輯器n數(shù)值設定框數(shù)值設定框n滑塊部件滑塊部件40QFrameQFrame類族類族 nQFrameQFrame類是帶有邊框的部件的基類。它的子類有我們最為常用的標簽類是帶有邊框的部件的基類。它的子類有我們最為常用的標簽部件部件QLabelQLabel,另外還有,另外還有QLCDNumberQLCDNumber、QSplitter
43、QSplitter、QStackedWidgetQStackedWidget、QToolBoxQToolBox和和QAbstractScrollAreaQAbstractScrollArea類。類。 n帶邊框部件最主要的特點就是可以有一個明顯的邊界框架。帶邊框部件最主要的特點就是可以有一個明顯的邊界框架。QFrameQFrame類類的主要功能也就是用來實現(xiàn)不同的邊框效果,這主要是由邊框形狀的主要功能也就是用來實現(xiàn)不同的邊框效果,這主要是由邊框形狀(ShapeShape)和邊框陰影()和邊框陰影(ShadowShadow)組合來形成的。)組合來形成的。 41例:例:QLabel n除了最常用的顯
44、示文本外,還可以顯示圖片:除了最常用的顯示文本外,還可以顯示圖片:ui-label-setPixmap(QPixmap(F:/logo.png);ui-label-setPixmap(QPixmap(F:/logo.png);n還可以顯示還可以顯示gifgif動態(tài)圖片:動態(tài)圖片:QMovie QMovie * *movie = new QMovie(F:/donghua.gif);movie = new QMovie(F:/donghua.gif);ui-label-setMovie(movie); / ui-label-setMovie(movie); / 在標簽中添加動畫在標簽中添加動畫m
45、ovie-start(); movie-start(); 42按鈕部件按鈕部件 QAbstractButton類是按鈕部件的抽象基類,提供了按鈕類是按鈕部件的抽象基類,提供了按鈕的通用功能。它的子類包括:的通用功能。它的子類包括:n復選框復選框QCheckBoxn標準按鈕標準按鈕QPushButtonn單選框按鈕單選框按鈕QRadioButtonn工具按鈕工具按鈕QToolButton。 43例:例:QPushButton 下面代碼為三個按鈕改變了顯示文本下面代碼為三個按鈕改變了顯示文本 在一個字母前加上在一個字母前加上“&”&”符號,那么就可以將這個按鈕的加速鍵設置為符號,那
46、么就可以將這個按鈕的加速鍵設置為AltAlt加加上這個字母。如果我們要在文本中顯示上這個字母。如果我們要在文本中顯示“&”&”符號本身,那么可以使用符號本身,那么可以使用“&”&” 可以使用可以使用setIcon()setIcon()函數(shù)來給按鈕添加圖標,這里圖片文件使用了相對路徑函數(shù)來給按鈕添加圖標,這里圖片文件使用了相對路徑(當然這個也可以在設計模式通過更改(當然這個也可以在設計模式通過更改iconicon屬性來實現(xiàn))。對于屬性來實現(xiàn))。對于pushBtn3pushBtn3,為其添加了下拉菜單。為其添加了下拉菜單。ui-pushBtn1-setText(tr
47、(&nihao); / ui-pushBtn1-setText(tr(&nihao); / 這樣便指定了這樣便指定了Alt+NAlt+N為加速鍵為加速鍵ui-pushBtn2-setText(tr(ui-pushBtn2-setText(tr(幫助幫助(&H);(&H);ui-pushBtn2-setIcon(QIcon(./image/help.png);ui-pushBtn2-setIcon(QIcon(./image/help.png);ui-pushBtn3-setText(tr(z&oom);ui-pushBtn3-setText(tr(z&a
48、mp;oom);QMenu QMenu * *menu = new QMenu(this);menu = new QMenu(this);menu-addAction(QIcon(./image/zoom-in.png), tr(menu-addAction(QIcon(./image/zoom-in.png), tr(放大放大););ui-pushBtn3-setMenu(menu);ui-pushBtn3-setMenu(menu); 44行編輯器行編輯器 行編輯器QLineEdit部件是一個單行的文本編輯器,它允許用戶輸入和編輯單行的純文本內容,而且提供了一系列有用的功能,包括撤銷與恢復
49、、剪切和拖放等操作。 例如:n顯示模式顯示模式 n輸入掩碼輸入掩碼 n輸入驗證輸入驗證 n自動補全自動補全 45例:自動補全功能例:自動補全功能 在在QLineEditQLineEdit中也提供了強大的自動補全功能,這是利用中也提供了強大的自動補全功能,這是利用QCompleterQCompleter類實現(xiàn)的:類實現(xiàn)的:QStringList wordList;wordList Qt Qt Creator setCaseSensitivity(Qt:CaseInsensitive); ui-lineEdit4-setCompleter(completer);46數(shù)值設定框數(shù)值設定框 QAbstractSpinBoxQAbstractSpinBox類是一個抽象基類,它提供了一個數(shù)值類是一個抽象基類,它提供了一個數(shù)值設定框和一個行編輯器來顯示設定值。它有三個子類:設定框和一個行編輯器來顯示設定值。它有三個子類:nQDateTimeEditQDateTimeEdit(日期時間設定)(日期時間設定)nQSpinBoxQSpinBox(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- PQA-18-生命科學試劑-MCE-3779
- Filiformine-生命科學試劑-MCE-8234
- 11-Hydroxy-9-R-hexahydrocannabinol-生命科學試劑-MCE-8544
- 4-Iso-THC-4-Iso-tetrahydrocannabinol-生命科學試劑-MCE-2807
- 2025年度磚廠承包與市場拓展合作協(xié)議
- 2025年新推出門面房出租管理服務合同
- 二零二五年度企業(yè)自愿離職合同解除范本及離職補償金計算標準
- 二零二五年度數(shù)字音樂版權互惠合作合同
- 二零二五年度洗煤廠煤炭洗選技術租賃合同
- 智能科技與家庭旅游的融合探索
- 2024全國能源行業(yè)火力發(fā)電集控值班員理論知識技能競賽題庫(多選題)
- 公司員工外派協(xié)議書范文
- 信息科技重大版 七年級上冊 互聯(lián)網(wǎng)應用與創(chuàng)新 第二單元教學設計 互聯(lián)網(wǎng)原理
- 肺栓塞的護理查房完整版
- 手術患者手術部位標識制度
- 運輸安全生產(chǎn)知識培訓試卷
- 抖音麗人行業(yè)短視頻直播項目運營策劃方案
- (2024年)知識產(chǎn)權全套課件(完整)
- 2024-2030年中國城市軌道交通行業(yè)發(fā)展現(xiàn)狀分析及市場供需預測報告
- 預防靜脈血栓疾病知識講座
- 《社區(qū)康復》課件-第十一章 其他疾病的社區(qū)康復實踐
評論
0/150
提交評論