版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章
Qt5基本對(duì)話框4.1標(biāo)準(zhǔn)文件對(duì)話框類(lèi)4.2標(biāo)準(zhǔn)顏色對(duì)話框類(lèi)4.3標(biāo)準(zhǔn)字體對(duì)話框類(lèi)4.4
標(biāo)準(zhǔn)輸入對(duì)話框類(lèi)4.5
消息對(duì)話框類(lèi)4.6
自定義消息框4.7工具盒類(lèi)4.8進(jìn)度條4.9調(diào)色板與電子鐘4.10可擴(kuò)展對(duì)話框4.11不規(guī)則窗體4.12程序啟動(dòng)畫(huà)面(QSplashScreen)首先介紹標(biāo)準(zhǔn)文件對(duì)話框(QFileDialog)、標(biāo)準(zhǔn)顏色對(duì)話框(QColorDialog)、標(biāo)準(zhǔn)字體對(duì)話框(QFontDialog)、標(biāo)準(zhǔn)輸入對(duì)話框(QInputDialog)及消息對(duì)話框(QMessageBox),運(yùn)行效果如圖4.1所示。(1)單擊“文件標(biāo)準(zhǔn)對(duì)話框?qū)嵗卑粹o,彈出“文件選擇”對(duì)話框(Openfiledialog),如圖4.2所示。(2)單擊“顏色標(biāo)準(zhǔn)對(duì)話框?qū)嵗卑粹o,彈出“顏色選擇”對(duì)話框(SelectColor),如圖4.3所示。(3)單擊“字體標(biāo)準(zhǔn)對(duì)話框?qū)嵗卑粹o,彈出“字體選擇”對(duì)話框(SelectFont),如圖4.4所示。(4)標(biāo)準(zhǔn)輸入對(duì)話框包括:標(biāo)準(zhǔn)字符串輸入對(duì)話框、標(biāo)準(zhǔn)條目選擇對(duì)話框、標(biāo)準(zhǔn)int類(lèi)型輸入對(duì)話框和標(biāo)準(zhǔn)double類(lèi)型輸入對(duì)話框。圖4.5“標(biāo)準(zhǔn)輸入對(duì)話框?qū)嵗保?)單擊“標(biāo)準(zhǔn)消息對(duì)話框?qū)嵗卑粹o,彈出“標(biāo)準(zhǔn)消息對(duì)話框?qū)嵗苯缑?。圖4.6“標(biāo)準(zhǔn)消息對(duì)話框”實(shí)例圖4.6“標(biāo)準(zhǔn)消息對(duì)話框”實(shí)例(續(xù))(6)如果以上所有的標(biāo)準(zhǔn)消息框都不能滿足開(kāi)發(fā)的需求,此處還介紹了Qt允許的Custom(自定義)消息框的使用方法。單擊“用戶(hù)自定義消息對(duì)話框?qū)嵗卑粹o,彈出“用戶(hù)自定義消息框”,如圖4.7所示。各種基本對(duì)話框通過(guò)調(diào)用各自不同的靜態(tài)函數(shù)來(lái)完成其功能,具體說(shuō)明見(jiàn)表4.1。4.1
標(biāo)準(zhǔn)文件對(duì)話框類(lèi)4.1.1函數(shù)說(shuō)明其函數(shù)形式如下:QStringQFileDialog::getOpenFileName( QWidget*parent=0, //標(biāo)準(zhǔn)文件對(duì)話框的父窗口 constQString&caption=QString(), //標(biāo)準(zhǔn)文件對(duì)話框的標(biāo)題名 constQString&dir=QString(), //注(1) constQString&filter=QString(), //注(2) QString*selectedFilter=0, //用戶(hù)選擇的過(guò)濾器通過(guò)此參數(shù)返回 Optionsoptions=0//選擇顯示文件名的格式,默認(rèn)是同時(shí)顯示目錄與文件名)4.1.2創(chuàng)建步驟下面是創(chuàng)建一個(gè)標(biāo)準(zhǔn)文件對(duì)話框的詳細(xì)步驟:(1)在“dialog.h”中,添加private成員變量如下:QPushButton*fileBtn;QLineEdit*fileLineEdit;QGridLayout*mainLayout;(2)添加槽函數(shù):privateslots: voidshowFile();在開(kāi)始部分添加頭文件:#include<QLineEdit>#include<QGridLayout>4.1.2創(chuàng)建步驟(3)在“dialog.cpp”文件中的構(gòu)造函數(shù)中添加代碼如下:fileBtn=newQPushButton; //各個(gè)控件對(duì)象的初始化fileBtn->setText(tr("文件標(biāo)準(zhǔn)對(duì)話框?qū)嵗?));fileLineEdit=newQLineEdit; //用來(lái)顯示選擇的文件名并添加布局管理:mainLayout=newQGridLayout(this);//布局設(shè)計(jì)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)其中,槽函數(shù)showFile()的具體實(shí)現(xiàn)代碼如下:voidDialog::showFile(){QStrings=QFileDialog::getOpenFileName(this,"openfiledialog","/","C++files(*.cpp)::Cfiles(*.c)::Headfiles(*.h)");fileLineEdit->setText(s);}4.1.2創(chuàng)建步驟在“dialog.cpp”文件的開(kāi)始部分添加頭文件:#include<QGridLayout>#include<QFileDialog>#include<QPushButton>4.2標(biāo)準(zhǔn)顏色對(duì)話框類(lèi)4.2.1函數(shù)說(shuō)明getColor()函數(shù)是標(biāo)準(zhǔn)顏色對(duì)話框QColorDialog類(lèi)的一個(gè)靜態(tài)函數(shù),該函數(shù)返回用戶(hù)選擇的顏色值,下面是getColor()函數(shù)形式:QColorgetColor( constQColor&initial=Qt::white, //注 QWidget*parent=0 //標(biāo)準(zhǔn)顏色對(duì)話框的父窗口);4.2.2創(chuàng)建步驟(1)在“dialog.h”中,添加private成員變量如下:QPushButton*colorBtn;QFrame*colorFrame;(2)添加槽函數(shù):voidshowColor();(3)在“dialog.cpp”中,構(gòu)造函數(shù)中的代碼如下:colorBtn=newQPushButton;//創(chuàng)建各個(gè)控件的對(duì)象colorBtn->setText(tr("顏色標(biāo)準(zhǔn)對(duì)話框?qū)嵗?));colorFrame=newQFrame;colorFrame->setFrameShape(QFrame::Box);colorFrame->setAutoFillBackground(true);4.2.2創(chuàng)建步驟在布局管理中添加代碼:mainLayout->addWidget(colorBtn,1,0);//布局設(shè)計(jì)mainLayout->addWidget(colorFrame,1,1);最后添加事件關(guān)聯(lián):connect(colorBtn,SIGNAL(clicked()),this,SLOT(showColor()));//事件關(guān)聯(lián)其中,槽函數(shù)showColor()的實(shí)現(xiàn)代碼如下:voidDialog::showColor(){QColorc=QColorDialog::getColor(Qt::blue);if(c.isValid()){colorFrame->setPalette(QPalette(c));}}4.2.2創(chuàng)建步驟(4)在文件開(kāi)始添加頭文件:#include<QColorDialog>(5)運(yùn)行該程序后,單擊“顏色標(biāo)準(zhǔn)對(duì)話框?qū)嵗卑粹o后顯示界面如圖4.3所示。4.3標(biāo)準(zhǔn)字體對(duì)話框類(lèi)4.3.1函數(shù)說(shuō)明getFont()函數(shù)是標(biāo)準(zhǔn)字體對(duì)話框QFontDialog類(lèi)的一個(gè)靜態(tài)函數(shù),該函數(shù)返回用戶(hù)所選擇的字體,下面是getFont()函數(shù)形式:QFontgetFont( bool*ok, //注 QWidget*parent=0 //標(biāo)準(zhǔn)字體對(duì)話框的父窗口);4.3.2創(chuàng)建步驟(1)在“dialog.h”中,添加private成員變量如下:QPushButton*fontBtn;QLineEdit*fontLineEdit;(2)添加槽函數(shù):voidshowFont();(3)在“dialog.cpp”中,構(gòu)造函數(shù)中的代碼如下:fontBtn=newQPushButton; //創(chuàng)建控件的對(duì)象fontBtn->setText(tr("字體標(biāo)準(zhǔn)對(duì)話框?qū)嵗?));fontLineEdit=newQLineEdit; //顯示更改的字符串fontLineEdit->setText(tr("Welcome!"));添加布局管理:mainLayout->addWidget(fontBtn,2,0);//布局設(shè)計(jì)mainLayout->addWidget(fontLineEdit,2,1);4.3.2創(chuàng)建步驟最后添加事件關(guān)聯(lián):connect(fontBtn,SIGNAL(clicked()),this,SLOT(showFont()));//事件關(guān)聯(lián)其中,槽函數(shù)showFont()的實(shí)現(xiàn)代碼如下:voidDialog::showFont(){boolok;QFontf=QFontDialog::getFont(&ok);if(ok){fontLineEdit->setFont(f);}}4.3.2創(chuàng)建步驟(4)在文件開(kāi)始添加頭文件:#include<QFontDialog>(5)運(yùn)行該程序后,單擊“字體標(biāo)準(zhǔn)對(duì)話框?qū)嵗卑粹o后顯示界面如圖4.4所示。4.4標(biāo)準(zhǔn)輸入對(duì)話框類(lèi)(1)在“DialogExample”項(xiàng)目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”菜單項(xiàng),在彈出的對(duì)話框中選擇“C++類(lèi)”選項(xiàng),單擊“選擇”按鈕,彈出“C++類(lèi)向?qū)А睂?duì)話框,在“基類(lèi)”后面的下拉列表框中輸入基類(lèi)名“QDialog”(需要由用戶(hù)手動(dòng)輸入),在“類(lèi)名”后面的文本框中輸入類(lèi)的名稱(chēng)“InputDlg”。(2)單擊“下一步”按鈕,單擊“完成”按鈕,在該工程中就添加了“inputdlg.h”頭文件和“inputdlg.cpp”源文件。(3)打開(kāi)“inputdlg.h”頭文件,完成所需要的各種控件的創(chuàng)建和各種功能的槽函數(shù)的聲明,具體代碼所示。(4)打開(kāi)“inputdlg.cpp”源文件,完成所需要的各種控件的創(chuàng)建和槽函數(shù)的實(shí)現(xiàn),具體代碼所示。4.4標(biāo)準(zhǔn)輸入對(duì)話框類(lèi)完成主對(duì)話框的操作過(guò)程如下。(1)在“dialog.h”中,添加頭文件:#include"inputdlg.h"添加private成員變量:QPushButton*inputBtn;添加實(shí)現(xiàn)標(biāo)準(zhǔn)輸入對(duì)話框?qū)嵗腎nputDlg類(lèi):
InputDlg*inputDlg;(2)添加槽函數(shù):voidshowInputDlg();4.4標(biāo)準(zhǔn)輸入對(duì)話框類(lèi)(3)在“dialog.cpp”中,構(gòu)造函數(shù)中的代碼如下:inputBtn=newQPushButton; //創(chuàng)建控件的對(duì)象inputBtn->setText(tr("標(biāo)準(zhǔn)輸入對(duì)話框?qū)嵗?));添加布局管理:mainLayout->addWidget(inputBtn,3,0); //布局設(shè)計(jì)最后添加事件關(guān)聯(lián):connect(inputBtn,SIGNAL(clicked()),this,SLOT(showInputDlg())); //事件關(guān)聯(lián)其中,槽函數(shù)showInputDlg()的實(shí)現(xiàn)代碼如下:voidDialog::showInputDlg(){inputDlg=newInputDlg(this);inputDlg->show();}(4)運(yùn)行該程序后,單擊“標(biāo)準(zhǔn)輸入對(duì)話框?qū)嵗卑粹o后顯示界面如圖4.5(a)所示。4.4.1標(biāo)準(zhǔn)字符串輸入對(duì)話框標(biāo)準(zhǔn)字符串輸入對(duì)話框是通過(guò)QInputDialog類(lèi)的靜態(tài)函數(shù)getText()來(lái)完成的,
getText()函數(shù)形式如下:QStringgetText( QWidget*parent, //標(biāo)準(zhǔn)輸入對(duì)話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)簽提示 QLineEdit::EchoModemode=QLineEdit::Normal, //指定標(biāo)準(zhǔn)輸入對(duì)話框中QLineEdit控件的輸入
模式 constQString&text=QString(), //標(biāo)準(zhǔn)字符串輸入對(duì)話框彈出時(shí)QLineEdit控件
中默認(rèn)出現(xiàn)的文字 bool*ok=0, //注 Qt::WindowFlagsflags=0 //指明標(biāo)準(zhǔn)輸入對(duì)話框的窗體標(biāo)識(shí));4.4.1標(biāo)準(zhǔn)字符串輸入對(duì)話框接著上述的程序,完成“inputdlg.cpp”文件中的槽函數(shù)ChangeName()的實(shí)現(xiàn)。具體代碼如下:voidInputDlg::ChangeName(){boolok;QStringtext=QInputDialog::getText(this,tr("標(biāo)準(zhǔn)字符串輸入對(duì)話框"),tr("請(qǐng)輸入姓名:"),QLineEdit::Normal,nameLabel2->text(),&ok);if(ok&&!text.isEmpty())nameLabel2->setText(text);}在“inputdlg.cpp”文件的開(kāi)頭添加頭文件:#include<QInputDialog>再次運(yùn)行程序,單擊“修改姓名”按鈕后出現(xiàn)對(duì)話框,可在該對(duì)話框內(nèi)修改姓名,如圖4.5(b)所示。4.4.2標(biāo)準(zhǔn)條目選擇對(duì)話框標(biāo)準(zhǔn)條目選擇對(duì)話框是通過(guò)QInputDialog類(lèi)的靜態(tài)函數(shù)getItem()來(lái)完成的,getItem()函數(shù)形式如下:QStringgetItem( QWidget*parent, //標(biāo)準(zhǔn)輸入對(duì)話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)簽提示 constQStringList&items, //注(1) intcurrent=0, //注(2) booleditable=true, //指定QComboBox控件中顯示的文字是否可編輯 bool*ok=0, //注(3) Qt::WindowFlagsflags=0//指明標(biāo)準(zhǔn)輸入對(duì)話框的窗口標(biāo)識(shí));4.4.2標(biāo)準(zhǔn)條目選擇對(duì)話框同上,接著上述的程序,完成“inputdlg.cpp”文件中的槽函數(shù)ChangeSex()的實(shí)現(xiàn)。具體代碼如下:voidInputDlg::ChangeSex(){ QStringListSexItems; SexItems<<tr("男")<<tr("女");
boolok; QStringSexItem=QInputDialog::getItem(this,tr("標(biāo)準(zhǔn)條目選擇對(duì)話框"),tr("請(qǐng)選擇性別:"),SexItems,0,false,&ok); if(ok&&!SexItem.isEmpty()) sexLabel2->setText(SexItem);}再次運(yùn)行程序,單擊“修改性別”按鈕后出現(xiàn)對(duì)話框,可在該對(duì)話框內(nèi)選擇性別,如圖4.5(c)所示。4.4.3標(biāo)準(zhǔn)int類(lèi)型輸入對(duì)話框標(biāo)準(zhǔn)int類(lèi)型輸入對(duì)話框是通過(guò)QInputDialog類(lèi)的靜態(tài)函數(shù)getInt()來(lái)完成的,getInt()函數(shù)形式如下:intgetInt( QWidget*parent, //標(biāo)準(zhǔn)輸入對(duì)話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)簽提示 intvalue=0, //指定標(biāo)準(zhǔn)輸入對(duì)話框中QSpinBox控件的默認(rèn)顯示值 intmin=-2147483647, //指定QSpinBox控件的數(shù)值范圍 intmax=2147483647, intstep=1, //指定QSpinBox控件的步進(jìn)值 bool*ok=0, //注 Qt::WindowFlagsflags=0 //指明標(biāo)準(zhǔn)輸入對(duì)話框的窗口標(biāo)識(shí));4.4.3標(biāo)準(zhǔn)int類(lèi)型輸入對(duì)話框同上,接著上述的程序,完成“inputdlg.cpp”文件中的槽函數(shù)ChangeAge()的實(shí)現(xiàn)。具體代碼如下:voidInputDlg::ChangeAge(){ boolok; intage=QInputDialog::getInt(this,tr("標(biāo)準(zhǔn)int類(lèi)型輸入對(duì)話框"),tr("請(qǐng)輸入年齡:"),ageLabel2->text().toInt(&ok),0,100,1,&ok); if(ok) ageLabel2->setText(QString(tr("%1")).arg(age));}再次運(yùn)行程序,單擊“修改年齡”按鈕后出現(xiàn)對(duì)話框,可在該對(duì)話框內(nèi)修改年齡,如圖4.5(d)所示。4.4.4標(biāo)準(zhǔn)double類(lèi)型輸入對(duì)話框標(biāo)準(zhǔn)double類(lèi)型輸入對(duì)話框是通過(guò)QInputDialog類(lèi)的靜態(tài)函數(shù)getDouble()來(lái)完成的,getDouble()函數(shù)形式如下:doublegetDouble( QWidget*parent, //標(biāo)準(zhǔn)輸入對(duì)話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對(duì)話框的標(biāo)簽提示 doublevalue=0, //指定標(biāo)準(zhǔn)輸入對(duì)話框中QSpinBox控件默認(rèn)的顯示值 doublemin=-2147483647, //指定QSpinBox控件的數(shù)值范圍 doublemax=2147483647, intdecimals=1, //指定QSpinBox控件的步進(jìn)值 bool*ok=0, //注 Qt::WindowFlagsflags=0 //指明標(biāo)準(zhǔn)輸入對(duì)話框的窗口標(biāo)識(shí));4.4.4標(biāo)準(zhǔn)double類(lèi)型輸入對(duì)話框同上,接著上述的程序,完成“inputdlg.cpp”文件中槽函數(shù)ChangeScore()的實(shí)現(xiàn)。具體代碼如下:voidInputDlg::ChangeScore(){ boolok; doublescore=QInputDialog::getDouble(this,tr("標(biāo)準(zhǔn)double類(lèi)型輸入對(duì)話框"),tr("請(qǐng)輸入成績(jī):"),scoreLabel2->text().toDouble(&ok),0,100,1,&ok); if(ok) scoreLabel2->setText(QString(tr("%1")).arg(score));}再次運(yùn)行程序,單擊“修改成績(jī)”按鈕后出現(xiàn)對(duì)話框,可在該對(duì)話框內(nèi)修改成績(jī),如圖4.5(e)所示。4.5消息對(duì)話框類(lèi)(1)添加該工程的提供主要顯示標(biāo)準(zhǔn)消息對(duì)話框界面的函數(shù)所在的文件,在“DialogExample”項(xiàng)目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”菜單項(xiàng),在彈出的對(duì)話框中選擇“C++類(lèi)”選項(xiàng),單擊“選擇”按鈕,彈出“C++類(lèi)向?qū)А睂?duì)話框,在“基類(lèi)”后面的下拉列表框中輸入基類(lèi)名“QDialog”,在“類(lèi)名”后面的文本框中輸入類(lèi)的名稱(chēng)“MsgBoxDlg”。(2)單擊“下一步”按鈕,單擊“完成”按鈕,在該工程中就添加了“msgboxdlg.h”頭文件和“msgboxdlg.cpp”源文件。(3)打開(kāi)“msgboxdlg.h”頭文件,完成所需要的各種控件的創(chuàng)建和完成功能的槽函數(shù)的聲明,具體代碼所示。(4)打開(kāi)“msgboxdlg.cpp”源文件,完成所需要的各種控件的創(chuàng)建和完成槽函數(shù)的實(shí)現(xiàn),具體代碼所示。4.5消息對(duì)話框類(lèi)下面是完成主對(duì)話框的操作過(guò)程。(1)在“dialog.h”中,添加頭文件:#include"msgboxdlg.h"添加private成員變量如下:QPushButton*MsgBtn;添加實(shí)現(xiàn)各種消息對(duì)話框?qū)嵗腗sgBoxDlg類(lèi):
MsgBoxDlg*msgDlg;(2)添加槽函數(shù):voidshowMsgDlg();4.5消息對(duì)話框類(lèi)(3)在“dialog.cpp”中,構(gòu)造函數(shù)中的代碼如下:MsgBtn=newQPushButton;//創(chuàng)建控件對(duì)象MsgBtn->setText(tr("標(biāo)準(zhǔn)消息對(duì)話框?qū)嵗?));添加布局管理:mainLayout->addWidget(MsgBtn,3,1);最后添加事件關(guān)聯(lián):connect(MsgBtn,SIGNAL(clicked()),this,SLOT(showMsgDlg()));其中,槽函數(shù)showMsgDlg()的實(shí)現(xiàn)代碼如下:voidDialog::showMsgDlg(){msgDlg=newMsgBoxDlg();msgDlg->show();}(4)運(yùn)行該程序后,單擊“標(biāo)準(zhǔn)消息對(duì)話框?qū)嵗卑粹o后,顯示效果如圖4.6(a)所示。4.5.1Question消息框Question消息框使用QMessageBox::question()函數(shù)完成,此函數(shù)形式如下:StandardButtonQMessageBox::question( QWidget*parent,//消息框的父窗口指針 constQString&title,//消息框的標(biāo)題欄 constQString&text,//消息框的文字提示信息 StandardButtonsbuttons=Ok, //注(1) StandardButtondefaultButton=NoButton //注(2));4.5.1Question消息框完成文件“msgboxdlg.cpp”中的槽函數(shù)showQuestionMsg(),具體代碼如下:voidMsgBoxDlg::showQuestionMsg(){label->setText(tr("QuestionMessageBox"));switch(QMessageBox::question(this,tr("Question消息框"),tr("您現(xiàn)在已經(jīng)修改完成,是否要結(jié)束程序?"),QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok)){caseQMessageBox::Ok:label->setText("Questionbutton/Ok");break;caseQMessageBox::Cancel:label->setText("Questionbutton/Cancel");break;default:break;}return;}在“msgboxdlg.cpp”的開(kāi)頭添加頭文件:#include<QMessageBox>運(yùn)行程序,單擊“QuestionMsg”按鈕后,顯示效果如圖4.6(b)所示。4.5.2Information消息框Information消息框使用QMessageBox::information()函數(shù)完成,函數(shù)形式如下:StandardButtonQMessageBox::information( QWidget*parent, //消息框的父窗口指針 constQString&title, //消息框的標(biāo)題欄 constQString&text, //消息框的文字提示信息 StandardButtonsbuttons=Ok, //同Question消息框的注釋內(nèi)容 StandardButtondefaultButton=NoButton //同Question消息框的注釋內(nèi)容);完成文件“msgboxdlg.cpp”中的槽函數(shù)showInformationMsg(),具體代碼如下:voidMsgBoxDlg::showInformationMsg(){label->setText(tr("InformationMessageBox"));QMessageBox::information(this,tr("Information消息框"),tr("這是Information消息框測(cè)試,歡迎您!"));return;}運(yùn)行程序,單擊“InformationMsg”按鈕后,顯示效果如圖4.6(c)所示。4.5.3Warning消息框Warning消息框使用QMessageBox::warning()函數(shù)完成,函數(shù)形式如下:StandardButtonQMessageBox::warning( QWidget*parent, //消息框的父窗口指針 constQString&title, //消息框的標(biāo)題欄 constQString&text, //消息框的文字提示信息 StandardButtonsbuttons=Ok, //同Question消息框的注釋內(nèi)容 StandardButtondefaultButton=NoButton//同Question消息框的注釋內(nèi)容);4.5.3Warning消息框完成文件“msgboxdlg.cpp”中的槽函數(shù)showWarningMsg(),具體代碼如下:voidMsgBoxDlg::showWarningMsg(){label->setText(tr("WarningMessageBox"));switch(QMessageBox::warning(this,tr("Warning消息框"),tr("您修改的內(nèi)容還未保存,是否要保存對(duì)文檔的修改?"),QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save)){caseQMessageBox::Save:label->setText(tr("Warningbutton/Save"));break;caseQMessageBox::Discard:label->setText(tr("Warningbutton/Discard"));break;caseQMessageBox::Cancel:label->setText(tr("Warningbutton/Cancel"));break;default:break;}return;}4.5.4Critical消息框Critical消息框使用QMessageBox::critical()函數(shù)完成,函數(shù)形式如下:StandardButtonQMessageBox::critical( QWidget*parent, //消息框的父窗口指針 constQString&title, //消息框的標(biāo)題欄 constQString&text, //消息框的文字提示信息 StandardButtonsbuttons=Ok, //同Question消息框的注釋內(nèi)容 StandardButtondefaultButton=NoButton//同Question消息框的注釋內(nèi)容);完成文件“msgboxdlg.cpp”中的槽函數(shù)showCriticalMsg(),具體代碼如下:voidMsgBoxDlg::showCriticalMsg(){ label->setText(tr("CriticalMessageBox")); QMessageBox::critical(this,tr("Critical消息框"),tr("這是一個(gè)Critical消息框測(cè)試!")); return;}運(yùn)行程序,單擊“CriticalMsg”按鈕后,顯示效果如圖4.6(e)所示。4.5.5About消息框About消息框使用QMessageBox::about()函數(shù)完成,函數(shù)形式如下:voidQMessageBox::about( QWidget*parent, //消息框的父窗口指針 constQString&title, //消息框的標(biāo)題欄 constQString&text //消息框的文字提示信息);完成文件“msgboxdlg.cpp”中的槽函數(shù)showAboutMsg(),具體代碼如下:voidMsgBoxDlg::showAboutMsg(){ label->setText(tr("AboutMessageBox")); QMessageBox::about(this,tr("About消息框"),tr("這是一個(gè)About消息框測(cè)試!")); return;}運(yùn)行程序,單擊“AboutMsg”按鈕后,顯示效果如圖4.6(f)所示。4.5.6AboutQt消息框AboutQt消息框使用QMessageBox::aboutQt()函數(shù)完成,函數(shù)形式如下:voidQMessageBox::aboutQt( QWidget*parent, //消息框的父窗口指針 constQString&title=QString() //消息框的標(biāo)題欄);完成文件“msgboxdlg.cpp”中的槽函數(shù)showAboutQtMsg(),具體代碼如下:voidMsgBoxDlg::showAboutQtMsg(){label->setText(tr("AboutQtMessageBox"));QMessageBox::aboutQt(this,tr("AboutQt消息框"));return;}運(yùn)行程序,單擊“AboutQtMsg”按鈕后,顯示效果如圖4.6(g)所示。4.6
自定義消息框(1)添加該工程的提供主要顯示標(biāo)準(zhǔn)消息對(duì)話框界面的函數(shù)所在的文件,在“DialogExample”項(xiàng)目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”菜單項(xiàng),在彈出的對(duì)話框中選擇“C++類(lèi)”選項(xiàng)。單擊“選擇”按鈕,彈出“C++類(lèi)向?qū)А睂?duì)話框,在“基類(lèi)”后面的下拉列表框中輸入基類(lèi)名“QDialog”,在“類(lèi)名”后面的文本框中輸入類(lèi)的名稱(chēng)“CustomDlg”。(2)單擊“下一步”按鈕,單擊“完成”按鈕,在該工程中就添加了“customdlg.h”頭文件和“customdlg.cpp”源文件。4.6
自定義消息框(3)打開(kāi)“customdlg.h”頭文件,自動(dòng)生成的代碼如下:#ifndefCUSTOMDLG_H#defineCUSTOMDLG_H
#include<QDialog>
classCustomDlg:publicQDialog{Q_OBJECTpublic:explicitCustomDlg(QWidget*parent=0);
signals:
publicslots:
};#endif//CUSTOMDLG_H4.6
自定義消息框(4)打開(kāi)“customdlg.cpp”文件,自動(dòng)生成的代碼如下:#include"customdlg.h"
CustomDlg::CustomDlg(QWidget*parent):QDialog(parent){}4.6
自定義消息框下面是完成主對(duì)話框的操作過(guò)程。(1)在“dialog.h”中添加private成員變量:QPushButton*CustomBtn;QLabel*label;(2)添加槽函數(shù):voidshowCustomDlg();(3)在“dialog.cpp”中的構(gòu)造函數(shù)中添加如下代碼:CustomBtn=newQPushButton;CustomBtn->setText(tr("用戶(hù)自定義消息對(duì)話框?qū)嵗?));label=newQLabel;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()));4.7
工具盒類(lèi)下面通過(guò)實(shí)現(xiàn)類(lèi)似QQ抽屜效果的實(shí)例來(lái)介紹QToolBox類(lèi)的使用,詳細(xì)內(nèi)容見(jiàn)代碼CH402,運(yùn)行效果如圖4.8所示。4.7
工具盒類(lèi)下面介紹實(shí)現(xiàn)的具體步驟。(1)新建QtGui應(yīng)用,項(xiàng)目名稱(chēng)為“MyQQExample”,基類(lèi)選擇“QDialog”,取消“創(chuàng)建界面”復(fù)選框的選中狀態(tài)。(2)下面添加該工程的提供主要顯示界面的函數(shù)所在的文件,在“MyQQExample”項(xiàng)目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”菜單項(xiàng),在彈出的對(duì)話框中選擇“C++類(lèi)”選項(xiàng)。單擊“選擇”按鈕,彈出“C++類(lèi)向?qū)А睂?duì)話框,在“基類(lèi)”后面的下拉列表框中輸入基類(lèi)名“QToolBox”(手工添加),在“類(lèi)名”后面的文本框中輸入類(lèi)的名稱(chēng)“Drawer”。(3)單擊“下一步”按鈕,單擊“完成”按鈕,添加“drawer.h”頭文件和“drawer.cpp”源文件。4.7
工具盒類(lèi)(4)Drawer類(lèi)繼承自QToolBox類(lèi),打開(kāi)“drawer.h”頭文件,定義實(shí)例中需要用到的各種窗體控件。具體代碼如下:#include<QToolBox>#include<QToolButton>classDrawer:publicQToolBox{ Q_OBJECT
public: Drawer(QWidget*parent=0,Qt::WindowFlagsf=0);
private: QToolButton*toolBtn1_1; QToolButton*toolBtn1_2; QToolButton*toolBtn1_3; QToolButton*toolBtn1_4; QToolButton*toolBtn1_5; QToolButton*toolBtn2_1; QToolButton*toolBtn2_2; QToolButton*toolBtn3_1; QToolButton*toolBtn3_2;};4.7
工具盒類(lèi)(5)打開(kāi)“drawer.cpp”源文件,添加代碼。(6)在“drawer.cpp”文件的一開(kāi)始加入以下頭文件:#include<QGroupBox>#include<QVBoxLayout>(7)打開(kāi)“main.cpp”文件,添加以下代碼:#include"dialog.h"#include<QApplication>#include"drawer.h"intmain(intargc,char*argv[]){QApplicationa(argc,argv);Drawerdrawer;drawer.show();returna.exec();}4.8
進(jìn)度條Qt提供了兩種顯示進(jìn)度條的方式,一種是QProgressBar(如圖4.9所示),提供了一種橫向或縱向顯示進(jìn)度的控件表示方式,用來(lái)描述任務(wù)的完成情況;另一種是QProgressDialog(如圖4.10所示)。
4.8
進(jìn)度條具體實(shí)現(xiàn)步驟如下。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 采購(gòu)合同的變更程序3篇
- 采購(gòu)合同編碼的方法3篇
- 四年級(jí)數(shù)學(xué)(簡(jiǎn)便運(yùn)算)計(jì)算題專(zhuān)項(xiàng)練習(xí)與答案
- 采購(gòu)合同中的工程質(zhì)量控制措施規(guī)定3篇
- 采購(gòu)合同評(píng)審表的案例分析3篇
- 采購(gòu)合同管理中的合規(guī)性問(wèn)題3篇
- 采購(gòu)合同中的質(zhì)量爭(zhēng)議解決方式3篇
- 采購(gòu)合同預(yù)付款風(fēng)險(xiǎn)防控3篇
- 采購(gòu)合同和采購(gòu)訂單的管理與執(zhí)行3篇
- 采購(gòu)合同買(mǎi)賣(mài)合同的培訓(xùn)筆記3篇
- 2024-2024年高考全國(guó)卷英語(yǔ)語(yǔ)法填空
- 第17課《貓》課件+【知識(shí)精研】統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 專(zhuān)題01:新聞作品-2023-2024學(xué)年八年級(jí)語(yǔ)文上冊(cè)單元主題閱讀(統(tǒng)編版)(原卷版+解析)
- 湖北省武漢市東湖高新區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末語(yǔ)文試題(解析版)
- 《風(fēng)險(xiǎn)評(píng)估培訓(xùn)》課件
- DB13-T 5931-2024 珍珠棉生產(chǎn)企業(yè)安全生產(chǎn)技術(shù)條件
- 2025屆上海曹楊二中高二物理第一學(xué)期期末綜合測(cè)試模擬試題含解析
- 會(huì)議會(huì)務(wù)服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- 成都大學(xué)《Python數(shù)據(jù)分析》2023-2024學(xué)年期末試卷
- 電大本科【人文英語(yǔ)3】2023-2024期末試題及答案(試卷代號(hào):1379)
- 2024年醫(yī)院消毒隔離制度范文(六篇)
評(píng)論
0/150
提交評(píng)論