版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第5章 基本對話框,5.1 標(biāo)準(zhǔn)文件對話框:QFileDialog類,5.2 標(biāo)準(zhǔn)顏色對話框:QColorDialog類,5.3 標(biāo)準(zhǔn)字體對話框:QFontDialog類,5.4 標(biāo)準(zhǔn)輸入對話框:QInputDialog類,5.5 消息對話框:QMessageBox類,5.7 工具盒QToolBox類,5.6 自定義(Custom)消息框,5.9 QPalette類與移動圖片綜合實例,5.10 可擴(kuò)展對話框的基本實現(xiàn)方法,5.11 不規(guī)則窗體,5.12 程序啟動畫面(QSplashScreen),5.13 多文檔的創(chuàng)建,5.14 使用Qt Designer設(shè)計對話框,5.8 進(jìn)度條(QProg
2、ressBar/QProgressDialog),5.1 標(biāo)準(zhǔn)文件對話框:QFileDialog類,5.1.1 函數(shù)說明 QFileDialog類有幾個靜態(tài)函數(shù)如表5.1所示,用戶通過這些函數(shù)可以很方便地定制自己的文件對話框。,5.1.1 函數(shù)說明,getOpenFileName()函數(shù)返回用戶選擇的文件名。但是當(dāng)用戶在選擇文件時,如果選擇“取消”(Cancel),則返回一個空串。在此只詳細(xì)說明getOpenFileName()靜態(tài)函數(shù)各個參數(shù)的作用,其他文件對話框類中相關(guān)的靜態(tài)函數(shù)的參數(shù)有與其類似之處。其函數(shù)形式如下: QString QFileDialog:getOpenFileName
3、( QWidget* parent=0, /標(biāo)準(zhǔn)文件對話框的父窗口 const QString QLineEdit *fileLineEdit; QGridLayout *mainLayout; (2) 添加private slots槽函數(shù): void showFile(); 在開始部分添加頭文件: #include #include ,5.1.2 創(chuàng)建步驟,(3) 在dialog.cpp文件中的構(gòu)造函數(shù)中添加代碼如下: fileBtn=new QPushButton; /各個控件對象的初始化 fileBtn-setText(tr(文件標(biāo)準(zhǔn)對話框?qū)嵗?; fileLineEdit=new QL
4、ineEdit; /用來顯示選擇的文件名 以及添加布局管理: mainLayout=new QGridLayout(this); /布局設(shè)計 mainLayout-addWidget(fileBtn,0,0); mainLayout-addWidget(fileLineEdit,0,1); 最后添加事件關(guān)聯(lián): connect(fileBtn,SIGNAL(clicked(),this,SLOT(showFile(); /事件關(guān)聯(lián),5.1.2 創(chuàng)建步驟,其中,槽函數(shù)showFile()的具體實現(xiàn)代碼如下: void Dialog:showFile() QString s = QFileDialo
5、g:getOpenFileName(this,open file dialog,/, C+ files(*.cpp):C files(*.c):Head files(*.h); fileLineEdit-setText(s); 在dialog.cpp文件的開始部分添加頭文件: #include #include #include,5.1.2 創(chuàng)建步驟,(4) 運(yùn)行該程序后,點(diǎn)擊“文件標(biāo)準(zhǔn)對話框?qū)嵗卑粹o后顯示圖5.2。,5.2 標(biāo)準(zhǔn)顏色對話框:QColorDialog類,5.2.1 函數(shù)說明 標(biāo)準(zhǔn)顏色對話框QColorDialog類的一個靜態(tài)函數(shù):getColor()函數(shù)返回用戶選擇的顏色值,
6、下面是getColor()函數(shù)形式: QColor getColor ( const QColor,5.2.2 創(chuàng)建步驟,下面是創(chuàng)建一個標(biāo)準(zhǔn)顏色對話框的詳細(xì)步驟: (1) 在dialog.h中,添加private成員變量如下: QPushButton *colorBtn; QFrame *colorFrame; (2) 添加private slots槽函數(shù): void showColor(); (3) 在dialog.cpp中,構(gòu)造函數(shù)中的代碼如下: colorBtn=new QPushButton; /創(chuàng)建各個控件的對象 colorBtn-setText(tr(顏色標(biāo)準(zhǔn)對話框?qū)嵗?; col
7、orFrame=new QFrame; colorFrame-setFrameShape(QFrame:Box); colorFrame-setAutoFillBackground(true);,5.2.2 創(chuàng)建步驟,其中QFrame的對象colorFrame是根據(jù)用戶選擇不同顏色更新不同的背景。 在布局管理中添加代碼: mainLayout-addWidget(colorBtn,1,0); /布局設(shè)計 mainLayout-addWidget(colorFrame,1,1); 最后添加事件關(guān)聯(lián): connect(colorBtn,SIGNAL(clicked(),this,SLOT(show
8、Color(); /事件關(guān)聯(lián) 其中,槽函數(shù)showColor()的實現(xiàn)代碼如下: void Dialog:showColor() QColor c = QColorDialog:getColor(Qt:blue); if(c.isValid()/if the user cancels the dialog,it returns an invalid color colorFrame-setPalette(QPalette(c); ,5.2.2 創(chuàng)建步驟,(4) 在文件開始添加頭文件: #include (5) 運(yùn)行該程序后,單擊“顏色標(biāo)準(zhǔn)對話框?qū)嵗卑粹o后顯示如圖5.3所示界面。,5.3 標(biāo)準(zhǔn)
9、字體對話框:QFontDialog類,5.3.1 函數(shù)說明 標(biāo)準(zhǔn)字體對話框QFontDialog類的一個靜態(tài)函數(shù)getFont()函數(shù),返回用戶選擇的字體,下面是getFont()函數(shù)形式: QFont getFont ( bool* ok, /注 QWidget* parent=0 /標(biāo)準(zhǔn)字體對話框的父窗口 );,5.3.2 創(chuàng)建步驟,下面是創(chuàng)建標(biāo)準(zhǔn)字體對話框的詳細(xì)步驟: (1) 在dialog.h中,添加private成員變量如下: QPushButton *fontBtn; QLineEdit *fontLineEdit; (2) 添加private slots槽函數(shù): void sho
10、wFont(); (3) 在dialog.cpp中,構(gòu)造函數(shù)中的代碼: fontBtn=new QPushButton; /創(chuàng)建控件的對象 fontBtn-setText(tr(字體標(biāo)準(zhǔn)對話框?qū)嵗?; fontLineEdit=new QLineEdit; /顯示更改的字符串 fontLineEdit-setText(tr(Welcome!); 以及添加布局管理: mainLayout-addWidget(fontBtn,2,0); /布局設(shè)計 mainLayout-addWidget(fontLineEdit,2,1); 最后添加事件關(guān)聯(lián): connect(fontBtn,SIGNAL(cl
11、icked(),this,SLOT(showFont(); /事件關(guān)聯(lián),5.3.2 創(chuàng)建步驟,其中,槽函數(shù)showFont()的實現(xiàn)代碼如下: void Dialog:showFont() bool ok; QFont f = QFontDialog:getFont( ,5.3.2 創(chuàng)建步驟,(4) 在文件開始添加頭文件: #include (5) 運(yùn)行該程序后,單擊“字體標(biāo)準(zhǔn)對話框?qū)嵗卑粹o后顯示如圖5.4所示界面。,5.4 標(biāo)準(zhǔn)輸入對話框:QInputDialog類,完成主對話框的操作過程如下: (1) 在dialog.h中,添加頭文件: #include inputdlg.h。 添加pr
12、ivate成員變量如下: QPushButton *inputBtn; 添加實現(xiàn)標(biāo)準(zhǔn)輸入對話框?qū)嵗腎nputDlg類: InputDlg *inputDlg; (2) 添加 private slots槽函數(shù): void showInputDlg();,5.4 標(biāo)準(zhǔn)輸入對話框:QInputDialog類,(3) 在dialog.cpp中,構(gòu)造函數(shù)中的代碼如下: inputBtn =new QPushButton; /創(chuàng)建控件的對象 inputBtn-setText(tr(標(biāo)準(zhǔn)輸入對話框?qū)嵗?; 添加布局管理: mainLayout-addWidget(inputBtn,3,0); /布局設(shè)計
13、最后添加事件關(guān)聯(lián): connect(inputBtn,SIGNAL(clicked(),this,SLOT(showInputDlg(); /事件關(guān)聯(lián) 其中,槽函數(shù)showInputDlg()的實現(xiàn)代碼如下: void Dialog:showInputDlg() inputDlg =new InputDlg(this); inputDlg-show(); ,5.4 標(biāo)準(zhǔn)輸入對話框:QInputDialog類,(4) 運(yùn)行該程序后,單擊“標(biāo)準(zhǔn)輸入對話框?qū)嵗卑粹o后顯示如圖5.5所示。,5.4.1 標(biāo)準(zhǔn)字符串輸入對話框,標(biāo)準(zhǔn)字符串輸入對話框是通過QInputDialog類的靜態(tài)函數(shù)getText(
14、)來完成的, getText()函數(shù)形式如下: QString getText ( QWidget* parent, /標(biāo)準(zhǔn)輸入對話框的父窗口 const QString,5.4.1 標(biāo)準(zhǔn)字符串輸入對話框,接著上述的程序,完成inputdlg.cpp文件中的槽函數(shù)ChangeName()的實現(xiàn)。具體代碼如下: void InputDlg:ChangeName() bool ok; QString text=QInputDialog:getText(this,tr(標(biāo)準(zhǔn)字符串輸入對話框),tr(請輸入姓名:), QLineEdit:Normal,nameLabel2-text(), 在input
15、dlg.cpp文件的開頭添加頭文件: #include,5.4.2 標(biāo)準(zhǔn)條目選擇對話框,標(biāo)準(zhǔn)條目選擇對話框是通過QInputDialog類的靜態(tài)函數(shù)getItem()函數(shù)完成, getItem()函數(shù)形式如下: QString getItem ( QWidget* parent, /標(biāo)準(zhǔn)輸入對話框的父窗口 const QString,5.4.2 標(biāo)準(zhǔn)條目選擇對話框,接著上述的程序,完成inputdlg.cpp文件中的槽函數(shù)ChangeSex()的實現(xiàn)。具體代碼如下: void InputDlg:ChangeSex() QStringList SexItems; SexItems setText
16、(SexItem); ,5.4.3 標(biāo)準(zhǔn)int類型輸入對話框,標(biāo)準(zhǔn)int類型輸入對話框通過QInputDialog類的靜態(tài)函數(shù)getInt()函數(shù)完成,getInt()函數(shù)形式如下: int getInt ( QWidget* parent, /標(biāo)準(zhǔn)輸入對話框的父窗口 const QString,5.4.3 標(biāo)準(zhǔn)int類型輸入對話框,接著上述的程序,完成inputdlg.cpp文件中的槽函數(shù)ChangeAge()的實現(xiàn)。具體代碼如下: void InputDlg:ChangeAge() bool ok; int age = QInputDialog:getInt(this, tr(標(biāo)準(zhǔn)int類
17、型輸入對話框), tr(請輸入年齡:), ageLabel2-text().toInt( ,5.4.4 標(biāo)準(zhǔn)double類型輸入對話框,標(biāo)準(zhǔn)double類型輸入對話框通過QInputDialog類的靜態(tài)函數(shù)getDouble()函數(shù)完成,getDouble()函數(shù)形式如下: double getDouble ( QWidget* parent, /標(biāo)準(zhǔn)輸入對話框的父窗口 const QString,5.4.4 標(biāo)準(zhǔn)double類型輸入對話框,接著上述的程序,完成inputdlg.cpp文件中槽函數(shù)ChangeScore()的實現(xiàn)。具體代碼如下: void InputDlg:ChangeScor
18、e() bool ok; double score = QInputDialog:getDouble(this, tr(標(biāo)準(zhǔn)double類型輸入對話框),tr(請輸入成績:),scoreLabel2-text().toDouble( ,5.5 消息對話框:QMessageBox類,下面是完成主對話框的操作過程: (1) 在dialog.h中,添加頭文件: #include msgboxdlg.h 添加private成員變量如下: QPushButton *MsgBtn; 添加實現(xiàn)各種消息對話框?qū)嵗腗sgBoxDlg類: MsgBoxDlg *msgDlg; (2) 添加private slo
19、ts槽函數(shù): void showMsgDlg();,5.5 消息對話框:QMessageBox類,(3) 在dialog.cpp中,構(gòu)造函數(shù)中的代碼如下: MsgBtn =new QPushButton; /創(chuàng)建控件對象 MsgBtn-setText(tr(標(biāo)準(zhǔn)消息對話框?qū)嵗?; 添加布局管理: mainLayout-addWidget(MsgBtn,3,1); 最后添加事件關(guān)聯(lián): connect(MsgBtn,SIGNAL(clicked(),this,SLOT(showMsgDlg(); 其中,槽函數(shù)showMsgDlg()的實現(xiàn)代碼如下: void Dialog:showMsgDlg()
20、 msgDlg =new MsgBoxDlg(); msgDlg-show(); ,5.5 消息對話框:QMessageBox類,(4) 運(yùn)行該程序后,單擊“標(biāo)準(zhǔn)消息對話框?qū)嵗卑粹o后,顯示效果如圖5.6所示。,5.5.1 Question消息框,Question消息框使用QMessageBox:question()函數(shù)完成,此函數(shù)形式如下: StandardButton QMessageBox:question ( QWidget* parent, /消息框的父窗口指針 const QString,5.5.1 Question消息框,完成文件msgboxdlg.cpp中的槽函數(shù)showQue
21、stionMsg()的具體代碼如下: void MsgBoxDlg:showQuestionMsg() label-setText(tr(Question Message Box); switch(QMessageBox:question(this,tr(Question消息框), tr(您現(xiàn)在已經(jīng)修改完成,是否要結(jié)束程序?), QMessageBox:Ok|QMessageBox:Cancel,QMessageBox:Ok) case QMessageBox:Ok: label-setText(Question button/Ok); break; case QMessageBox:Canc
22、el: label-setText(Question button/Cancel); break; default: break; return; 在msgboxdlg.cpp的開頭添加頭文件: #include,5.5.2 Information消息框,Information消息框使用QMessageBox:information()函數(shù)完成,函數(shù)形式如下: StandardButton QMessageBox:information ( QWidget*parent, /消息框的父窗口指針 const QString ,5.5.3 Warning消息框,Warning消息框使用QMessa
23、geBox:warning()函數(shù)完成,函數(shù)形式如下: StandardButton QMessageBox:warning ( QWidget* parent, /消息框的父窗口指針 const QString,5.5.3 Warning消息框,完成文件msgboxdlg.cpp中的槽函數(shù)showWarningMsg(),具體實現(xiàn)如下: void MsgBoxDlg:showWarningMsg() label-setText(tr(Warning Message Box); switch(QMessageBox:warning(this,tr(Warning消息框), tr(您修改的內(nèi)容還
24、未保存,是否要保存對文檔的修改?), QMessageBox:Save|QMessageBox:Discard|QMessageBox:Cancel, QMessageBox:Save) case QMessageBox:Save: label-setText(tr(Warning button/Save); break; case QMessageBox:Discard: label-setText(tr(Warning button/Discard); break; case QMessageBox:Cancel: label-setText(tr(Warning button/Cance
25、l); break; default: break; return; ,5.5.4 Critical消息框,Critical消息框使用QMessageBox:critical()函數(shù)完成,函數(shù)形式如下: StandardButton QMessageBox:critical ( QWidget* parent, /消息框的父窗口指針 const QString ,5.5.5 About消息框,About消息框使用QMessageBox:about()函數(shù)完成,函數(shù)形式如下: void QMessageBox:about ( QWidget* parent, /消息框的父窗口指針 const Q
26、String ,5.5.6 About Qt消息框,About Qt消息框使用QMessageBox: aboutQt ()函數(shù)完成,函數(shù)形式如下: void QMessageBox:aboutQt ( QWidget* parent, /消息框的父窗口指針 const QString ,5.6 自定義(Custom)消息框,下面介紹一下自定義(Custom)消息框的具體創(chuàng)建方法: (1) 添加該工程的提供主要顯示標(biāo)準(zhǔn)消息對話框界面的函數(shù)所在的文件,在“DialogExample”項目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Add New.”菜單項,在彈出的對話框中選擇“C+ Class”選
27、項。單擊“OK”按鈕,彈出“C+ Class Wizard”對話框,在Base class后面的下拉列表框中輸入基類名“QDialog”,在Class name后面的文本框中輸入類的名稱“CustomDlg”。 (2) 單擊“Next”按鈕,單擊“Finish”按鈕,在該工程中就添加了customdlg.h頭文件和customdlg.cpp源文件。,5.6 自定義(Custom)消息框,(3) 打開“msgboxdlg.h”頭文件,自動生成的代碼如下: #include class CustomDlg : public QDialog public: CustomDlg(); ; (4) 打開
28、“msgboxdlg.cpp”文件,自動生成的代碼如下: #include customdlg.h CustomDlg:CustomDlg() ,5.6 自定義(Custom)消息框,下面是完成主對話框的操作過程: (1) 在dialog.h中添加private成員變量: QPushButton *CustomBtn; QLabel *label; (2) 添加private slots槽函數(shù): void showCustomDlg(); (3) 在dialog.cpp中的構(gòu)造函數(shù)中添加如下代碼: CustomBtn =new QPushButton; CustomBtn-setText(tr
29、(用戶自定義消息對話框?qū)嵗?; label =new QLabel; label-setFrameStyle(QFrame:Panel|QFrame:Sunken); 以及添加布局管理: mainLayout-addWidget(CustomBtn,4,0); mainLayout-addWidget(label,4,1); 在Dialog構(gòu)造函數(shù)的最后添加事件關(guān)聯(lián)代碼: connect(CustomBtn,SIGNAL(clicked(),this,SLOT(showCustomDlg(); 其中,dialog.cpp文件中的槽函數(shù)showCustomDlg()實現(xiàn)的具體代碼。 在開始部分加
30、上頭文件: #include ,5.7 工具盒QToolBox類,下面通過實現(xiàn)類似QQ抽屜效果來介紹QToolBox類的使用,QToolBox提供了一種列狀的層疊窗體,而QToolButton提供了一種快速訪問命令或選擇項的按鈕,通常在工具條中使用。詳細(xì)內(nèi)容見代碼CH502,運(yùn)行效果如圖5.8所示。,5.7 工具盒QToolBox類,(1) 建立一個空工程。單擊“File”-“New File or Project.”,在彈出的對話框中選擇Projects組下的“Empty Qt4 Project”,單擊“OK”按鈕。 (2) 在彈出的對話框中對該工程進(jìn)行命名并選擇保存的路徑,這里命名為 “M
31、yQQExample”。單擊“Next”按鈕,最后單擊“Finish”按鈕,完成該文件工程的建立。 (3) 下面添加該工程的提供主要顯示界面的函數(shù)所在的文件,在“MyQQExample”項目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Add New.”菜單項,在彈出的對話框中選擇“C+ Class”選項。單擊“OK”按鈕,彈出“C+ Class Wizard”對話框,在Base class后面的下拉列表框中輸入基類名“QToolBox”(手工添加),在Class name后面的文本框中輸入類的名稱“Drawer”。 (4) 單擊“Next”按鈕,單擊“Finish”按鈕,添加drawer.h頭文
32、件和drawer.cpp源文件。,5.7 工具盒QToolBox類,(5) Drawer類繼承自QToolBox類,打開“drawer.h”頭文件,定義實例中需要用到的各種窗體控件。具體代碼如下: #include #include class Drawer : public QToolBox Q_OBJECT public: Drawer(QWidget *parent=0,Qt:WindowFlags f=0); private: QToolButton *toolBtn1_1; QToolButton *toolBtn1_2; QToolButton *toolBtn1_3; QTool
33、Button *toolBtn1_4; QToolButton *toolBtn1_5; QToolButton *toolBtn2_1; QToolButton *toolBtn2_2; QToolButton *toolBtn3_1; QToolButton *toolBtn3_2; ;,5.7 工具盒QToolBox類,(6) 打開“drawer.cpp”文件,添加代碼。 (7) 在“drawer.cpp”文件一開始加入以下頭文件: #include #include (8) 下面添加該工程的入口函數(shù)所在的文件(main.cpp文件),在“MyQQExample”項目名上單擊鼠標(biāo)右鍵,在
34、彈出的快捷菜單中選擇“Add New.”菜單項,在彈出的對話框中選擇“C+ Source File”選項,單擊“OK”按鈕,彈出“New C+ Source File”對話框,在name后面的文本框中輸入“main.cpp”。單擊“Next”按鈕,單擊“Finish”按鈕,添加main函數(shù)。,5.7 工具盒QToolBox類,(9) 打開“main.cpp”文件,添加以下代碼: #include #include drawer.h #include int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec:set
35、CodecForTr(QTextCodec:codecForLocale(); /顯示中文 Drawer drawer; drawer.show(); return a.exec(); (10) 編譯運(yùn)行此程序,此時未看到加載的圖片,是因為圖片放置的路徑不是默認(rèn)的,只要將所用到的圖片放置到該工程下的debug文件夾下即可。最后運(yùn)行一下程序,顯示效果如圖5.8所示。,5.8 進(jìn)度條(QProgressBar/QProgressDialog),Qt提供了兩種顯示進(jìn)度條的方式,一種是QprogressBar(如圖5.9所示),提供了一種橫向或縱向顯示進(jìn)度的控件表示方式,用來描述任務(wù)的完成情況;另一種
36、是QProgressDialog(如圖5.10所示),提供了一種針對慢速過程的進(jìn)度對話框表示方式,用于描述任務(wù)完成的進(jìn)度情況。,5.8 進(jìn)度條(QProgressBar/QProgressDialog),具體實現(xiàn)步驟如下: (1) 建立一個工程。單擊“File”-“New File or Project.”,在彈出的對話框中選擇Projects組下的“Qt4 Gui Application”,單擊“OK”按鈕。 (2) 在彈出的對話框中對該工程進(jìn)行命名并選擇保存工程的路徑,這里將工程命名(Name)為Progress,單擊“Next”按鈕,再次單擊“Next”按鈕。在“Class name”后
37、面的文本框中輸入ProgressDlg,在基類“Base class”后面的下拉列表框中選擇“QDialog”選項,取消“Generate form”復(fù)選框的選中狀態(tài),單擊“Next”按鈕,最后單擊“Finish”按鈕,完成該文件工程的建立。,5.8 進(jìn)度條(QProgressBar/QProgressDialog),(3) ProgressDlg類繼承自QDialog類,打開“progressdlg.h”頭文件,添加如下加黑代碼: /添加的頭文件 #include #include #include #include #include #include class ProgressDlg :
38、 public QDialog Q_OBJECT public: ProgressDlg(QWidget *parent = 0); private slots: void startProgress(); private: QLabel *FileNum; QLineEdit *FileNumLineEdit; QLabel *ProgressType; QComboBox *comboBox; QProgressBar *progressBar; QPushButton *starBtn; QGridLayout *mainLayout; ;,5.8 進(jìn)度條(QProgressBar/QP
39、rogressDialog),(4) 構(gòu)造函數(shù)主要完成主界面的初始化工作,包括各控件的創(chuàng)建、布局以及信號/槽的連接。打開“progressdlg.cpp”文件,添加代碼。 其中,槽函數(shù)startProgress()的具體代碼。 (5) 打開“main.cpp”文件,添加以下加黑代碼以顯示中文: #include int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); ProgressDlg w; w.show(); retur
40、n a.exec(); (6) 運(yùn)行程序,查看顯示效果。,5.9 QPalette類與移動圖片綜合實例,5.9.1 QPalette類 介紹一下QPalette類的使用方法,該類有兩個基本的概念,一個是ColorGroup,另一個是ColorRole。其中,ColorGroup指的是以下3種不同的狀態(tài): QPalette:Active:獲得焦點(diǎn)的狀態(tài); QPalette:Inactive:未獲得焦點(diǎn)的狀態(tài); QPalette:Disable:不可用狀態(tài)。 ColorRole指的是顏色主題,即對窗體中不同部位顏色的分類。例如:QPalette:Window是指背景色,QPalette:Windo
41、wText指的是前景色等等。 QPalette類使用最多,最重要的函數(shù)是setColor()函數(shù),其原型如下: void QPalette:setColor(ColorGroup group,ColorRole role,const QColor ,5.9.1 QPalette類,只對某個主題的顏色進(jìn)行設(shè)置,并不區(qū)分狀態(tài)。 QPalette類同時還提供了setBrush()函數(shù),通過畫刷的設(shè)置來對顯示進(jìn)行更改,這樣就有可能使用圖片而不僅是單一的顏色來對主題進(jìn)行填充了。Qt之前版本中有關(guān)背景色設(shè)置的函數(shù)如setBackgroundColor()或前景色設(shè)置的函數(shù)如setForegroundCol
42、or()在Qt4中都被廢止,統(tǒng)一由QPalette類進(jìn)行管理。如setBackgroundColor()函數(shù)可由以下語句代替: xxx-setAutoFillBackground(true); QPalette p = xxx-palette(); p.setColor(QPalette:Window,color);/p.setBrush(QPalette:Window,brush); xxx-setPalette(p);,5.9.2 QTime類,QTime的currentTime()函數(shù)獲取當(dāng)前的系統(tǒng)時間;QTime的toString()函數(shù)把獲取的當(dāng)前時間轉(zhuǎn)換成字符串類型。為便于顯示,t
43、oString()函數(shù)的參數(shù)需指定轉(zhuǎn)換后時間的顯示格式。 H/h:小時(若使用H表示小時,則無論何時都以24小時制顯示小時;若使用h表示小時,則當(dāng)同時指定AM/PM時,采用12小時制顯示小時,其他情況下仍采用24小時制進(jìn)行顯示)。 m:分鐘。 s:秒鐘。 AP/A:顯示AM或PM。 Ap/a:顯示am或pm。,5.10 可擴(kuò)展對話框的基本實現(xiàn)方法,可擴(kuò)展對話框的基本實現(xiàn)方法即是利用setSizeConstraint(QLayout:SetFixedSize)方法使對話框尺寸保持相對固定。其中,最關(guān)鍵的部分有以下兩點(diǎn): 在整個對話框的構(gòu)造函數(shù)中調(diào)用。 layout-setSizeConstrai
44、nt(QLayout:SetFixedSize); 這個設(shè)置保證了對話框的尺寸保持相對固定,始終是各控件組合的默認(rèn)尺寸,在擴(kuò)展部分顯示時,對話框尺寸根據(jù)需要顯示的控件進(jìn)行擴(kuò)展調(diào)整,而在擴(kuò)展部分隱藏時,對話框尺寸又恢復(fù)至初始狀態(tài)。 切換按鈕的實現(xiàn)。整個窗體可擴(kuò)展的工作都是在此按鈕所連接的槽函數(shù)中完成。,5.10 可擴(kuò)展對話框的基本實現(xiàn)方法,下面通過一個簡單的填寫資料的例子介紹具體做法,通常情況下,只需填寫姓名和性別,在有特殊需要時,還需填寫更多信息時則切換至完整對話窗體,具體實現(xiàn)代碼見CH506,運(yùn)行效果如圖5.12所示。,5.10 可擴(kuò)展對話框的基本實現(xiàn)方法,具體實現(xiàn)步驟如下: (1) 建立一
45、個工程。單擊“File”-“New File or Project.”,在彈出的對話框中選擇Projects組下的“Qt4 Gui Application”,單擊“OK”按鈕。 (2) 在彈出的對話框中對該工程進(jìn)行命名并選擇保存工程的路徑,這里將工程命名(Name)為ExtensionDlg,單擊“Next”按鈕,再次單擊“Next”按鈕,在“Class name”后面的文本框中輸入ExtensionDlg,在基類“Base class”后面的下拉列表框中選擇“QDialog”選項,取消“Generate form”復(fù)選框的選中狀態(tài),單擊“Next”按鈕,最后單擊“Finish”按鈕,完成該文
46、件工程的建立。,5.10 可擴(kuò)展對話框的基本實現(xiàn)方法,(3) ExtensionDlg類繼承自QDialog,打開“extensiondlg.h”頭文件,具體代碼如下: #include class ExtensionDlg : public QDialog Q_OBJECT public: ExtensionDlg(QWidget *parent = 0); private slots: void showDetailInfo(); private: void createBaseInfo(); /實現(xiàn)基本對話窗體部分 void createDetailInfo(); /實現(xiàn)擴(kuò)展窗體部分 Q
47、Widget *baseWidget; /基本對話窗體部分 QWidget *detailWidget; /擴(kuò)展窗體部分 ;,5.10 可擴(kuò)展對話框的基本實現(xiàn)方法,(4) 打開“extensiondlg.cpp”文件,添加以下代碼: #include #include #include #include #include #include #include ExtensionDlg:ExtensionDlg(QWidget *parent) : QDialog(parent) setWindowTitle(tr(Extension Dialog); createBaseInfo(); crea
48、teDetailInfo(); QVBoxLayout *layout =new QVBoxLayout(this); /布局 layout-addWidget(baseWidget); layout-addWidget(detailWidget); layout-setSizeConstraint(QLayout:SetFixedSize); layout-setSpacing(10); ,5.10 可擴(kuò)展對話框的基本實現(xiàn)方法,(5) 為顯示中文,在main.cpp文件中添加以下加黑代碼: #include #include extensiondlg.h #include int main(
49、int argc, char *argv) QApplication a(argc, argv); QTextCodec:setCodecForTr(QTextCodec:codecForLocale(); ExtensionDlg w; w.show(); return a.exec(); (6) 運(yùn)行程序,查看顯示效果。,5.11 不規(guī)則窗體,下面通過一個實例介紹不規(guī)則窗體的實現(xiàn)方法,此實例實現(xiàn)了一個蝴蝶圖形外沿形狀的不規(guī)則形狀對話框,也可以在不規(guī)則窗體上放置按鈕等控件,可以通過鼠標(biāo)左鍵拖動窗體,鼠標(biāo)右鍵關(guān)閉窗體。具體代碼見CH507,運(yùn)行效果如圖5.13所示。,5.11 不規(guī)則窗體,具體
50、實現(xiàn)步驟如下: (1) 建立一個工程。單擊“File”-“New File or Project.”,在彈出的對話框中選擇Projects組下的“Qt4 Gui Application”,單擊“OK”按鈕。 (2) 在彈出的對話框中對該工程進(jìn)行命名并選擇保存工程的路徑。這里將工程命名(Name)為ShapeWidget,單擊“Next”按鈕,再次單擊“Next”按鈕,在“Class name”后面的文本框中輸入ShapeWidget,在基類“Base class”后面的下拉列表框中選擇“QWidget”選項,取消“Generate form”復(fù)選框的選中狀態(tài),單擊“Next”按鈕,最后單擊“F
51、inish”按鈕,完成該文件工程的建立。,5.11 不規(guī)則窗體,(3) 不規(guī)則窗體類ShapeWidget繼承自QWidget類,為了使不規(guī)則窗體能用鼠標(biāo)隨意拖動,在該類中重定義了鼠標(biāo)事件mousePressEvent()、mouseMoveEvent()以及繪制函數(shù)paintEvent(),打開“shapewidget.h”頭文件,添加如下代碼: class ShapeWidget : public QWidget Q_OBJECT public: ShapeWidget(QWidget *parent = 0); protected: void mousePressEvent(QMouse
52、Event *); void mouseMoveEvent(QMouseEvent *); void paintEvent(QPaintEvent *); private: QPoint dragPosition; ;,5.11 不規(guī)則窗體,(4) 打開“shapewidget.cpp”文件,ShapeWidget的構(gòu)造函數(shù)部分是實現(xiàn)不規(guī)則窗體的關(guān)鍵,添加的具體代碼如下: /添加的頭文件 #include #include #include #include ShapeWidget:ShapeWidget(QWidget *parent) : QWidget(parent) QPixmap p
53、ix; pix.load(16.png,0,Qt:AvoidDither|Qt:ThresholdDither|Qt:ThresholdAlphaDither); resize(pix.size(); setMask(QBitmap(pix.mask(); ,5.12 程序啟動畫面(QSplashScreen),當(dāng)運(yùn)行程序時,在顯示屏的中央出現(xiàn)一個啟動畫面,經(jīng)過一段時間,應(yīng)用程序完成初始化工作后,啟動畫面隱去,出現(xiàn)程序的主窗口界面。 具體實現(xiàn)方法如下: (1) 建立一個工程。單擊“File”-“New File or Project.”,在彈出的對話框中選擇Projects組下的“Qt4 Gu
54、i Application”,單擊“OK”按鈕。 (2) 在彈出的對話框中對該工程進(jìn)行命名并選擇保存工程的路徑,在這里將工程命名(Name)為 SplashSreen,單擊“Next”按鈕,再次單擊“Next”按鈕,在“Class name”后面的文本框中輸入MainWindow,在基類“Base class”后面的下拉列表框中選擇“QMainWindow”選項。取消“Generate form”復(fù)選框的選中狀態(tài),單擊“Next”按鈕,最后單擊“Finish”按鈕,完成該文件工程的建立。,5.12 程序啟動畫面(QSplashScreen),(3) 主窗體MainWindow類繼承自QMain
55、Window類,模擬一個程序的啟動,打開“mainwindow.h”頭文件,自動生成代碼如下: #include class MainWindow : public QMainWindow Q_OBJECT public: MainWindow(QWidget *parent = 0); ;,5.12 程序啟動畫面(QSplashScreen),(4) 打開“mainwindow.cpp”文件,添加如下代碼: /添加的頭文件 #include #include MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent) setWin
56、dowTitle(Splash Example); QTextEdit *edit=new QTextEdit; edit-setText(Splash Example!); setCentralWidget(edit); resize(600,450); Sleep(1000); ,5.12 程序啟動畫面(QSplashScreen),(5) 啟動畫面主要在main()函數(shù)中實現(xiàn),打開“main.cpp”文本,添加以下加黑代碼: #include #include mainwindow.h #include #include int main(int argc, char *argv) QApplication a(argc, argv); QPixmap pixmap(4.1.png); QSplashScreen splash(pixmap); splash.show(); cessEvents(); MainWindow w; w.show(); splash.finish( ,5.13 多文檔的創(chuàng)建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河北省承德市輔警人員招聘考試試卷及答案
- 2025-2026年蘇教版九年級語文上冊期末試題庫及答案
- 道教針灸絕技培訓(xùn)課件
- 道德與法治培訓(xùn)課件
- 2025體外循環(huán)在成人心臟手術(shù)應(yīng)用指南解讀課件
- 《光的色散》物理授課課件
- 鐵嶺衛(wèi)生職業(yè)學(xué)院歷年單招考試題
- 車險客服培訓(xùn)課件
- 車隊年后復(fù)工安全培訓(xùn)課件
- 母嬰室升級改造方案范文
- 【一例擴(kuò)張型心肌病合并心力衰竭患者的個案護(hù)理】5400字【論文】
- 四川橋梁工程系梁專項施工方案
- DB32T 3695-2019房屋面積測算技術(shù)規(guī)程
- 貴州省納雍縣水東鄉(xiāng)水東鉬鎳礦采礦權(quán)評估報告
- GB 8270-2014食品安全國家標(biāo)準(zhǔn)食品添加劑甜菊糖苷
- 2023年杭州臨平環(huán)境科技有限公司招聘筆試題庫及答案解析
- 易制毒化學(xué)品日常管理有關(guān)問題權(quán)威解釋和答疑
- LF爐機(jī)械設(shè)備安裝施工方案
- 湖北省高等教育自學(xué)考試
- 企業(yè)三級安全生產(chǎn)標(biāo)準(zhǔn)化評定表(新版)
- 中心衛(wèi)生院關(guān)于成立按病種分值付費(fèi)(DIP)工作領(lǐng)導(dǎo)小組及制度的通知
評論
0/150
提交評論