Qt 5 開發(fā)及實例(第5版) 課件 第4章 Qt 5基本對話框及實例_第1頁
Qt 5 開發(fā)及實例(第5版) 課件 第4章 Qt 5基本對話框及實例_第2頁
Qt 5 開發(fā)及實例(第5版) 課件 第4章 Qt 5基本對話框及實例_第3頁
Qt 5 開發(fā)及實例(第5版) 課件 第4章 Qt 5基本對話框及實例_第4頁
Qt 5 開發(fā)及實例(第5版) 課件 第4章 Qt 5基本對話框及實例_第5頁
已閱讀5頁,還剩119頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例Qt5基本對話框及實例通過一個實例詳細介紹標(biāo)準(zhǔn)基本對話框的使用方法,首先介紹標(biāo)準(zhǔn)文件對話框(QFileDialog)、標(biāo)準(zhǔn)顏色對話框(QColorDialog)、標(biāo)準(zhǔn)字體對話框(QFontDialog)、標(biāo)準(zhǔn)輸入對話框(QInputDialog)及標(biāo)準(zhǔn)消息對話框(QMessageBox),運行效果如圖。Qt5基本對話框及實例(1)單擊“文件標(biāo)準(zhǔn)對話框?qū)嵗卑粹o,彈出“文件選擇”對話框(openfiledialog),如圖。選中的文件名所在目錄路徑將顯示在右圖中該按鈕右側(cè)的標(biāo)簽中。Qt5基本對話框及實例(2)單擊“顏色標(biāo)準(zhǔn)對話框?qū)嵗卑粹o,彈出“顏色選擇”(SelectColor)對話框,如圖。選中的顏色將顯示在右圖中該按鈕右側(cè)的標(biāo)簽中。

Qt5基本對話框及實例(3)單擊“字體標(biāo)準(zhǔn)對話框?qū)嵗卑粹o,彈出“字體選擇”(SelectFont)對話框,如圖。選中的字體將應(yīng)用于如右圖中該按鈕右側(cè)顯示的文字。Qt5基本對話框及實例(4)標(biāo)準(zhǔn)輸入對話框包括:標(biāo)準(zhǔn)字符串輸入對話框、標(biāo)準(zhǔn)條目選擇對話框、標(biāo)準(zhǔn)int類型輸入對話框和標(biāo)準(zhǔn)double類型輸入對話框。單擊“標(biāo)準(zhǔn)輸入對話框?qū)嵗卑粹o,彈出“標(biāo)準(zhǔn)輸入對話框?qū)嵗苯缑?,如圖(a)所示。在“標(biāo)準(zhǔn)輸入對話框?qū)嵗苯缑嬷?,若調(diào)用“修改姓名”輸入框,則為一個QLineEdit,如圖(b)所示;若調(diào)用“修改性別”列表框,則為一個QComboBox,如圖(c)所示;若調(diào)用“修改年齡”(int類型)或“修改成績”(double類型)輸入框,則為一個QSpinBox,如圖(d)和圖(e)所示。

Qt5基本對話框及實例(5)單擊“標(biāo)準(zhǔn)消息對話框?qū)嵗卑粹o,彈出“標(biāo)準(zhǔn)消息對話框?qū)嵗苯缑?,如圖(a)所示?!皹?biāo)準(zhǔn)消息對話框?qū)嵗苯缑姘≦uestion消息框,如圖(b)所示;Information消息框,如圖(c)所示;Warning消息框,如圖(d)所示;Critical消息框,如圖(e)所示;About消息框,如圖(f)所示;AboutQt消息框,如圖(g)所示。

Qt5基本對話框及實例(6)如果以上所有的標(biāo)準(zhǔn)消息框都不能滿足開發(fā)的需求,則下面介紹Qt允許的Custom(自定義)消息框的使用方法。單擊“用戶自定義消息對話框?qū)嵗卑粹o,彈出“用戶自定義消息框”界面,如圖。Qt5基本對話框及實例各種標(biāo)準(zhǔn)基本對話框通過調(diào)用各自不同的靜態(tài)函數(shù)來完成其功能,具體說明見表。相

關(guān)

類類

明靜

態(tài)

數(shù)函

數(shù)

明QFileDialog類標(biāo)準(zhǔn)文件對話框getOpenFileName獲得用戶選擇的文件名getSaveFileName獲得用戶保存的文件名getExistingDirectory獲得用戶選擇的已存在的目錄名getOpenFileNames獲得用戶選擇的文件名列表QColorDialog類標(biāo)準(zhǔn)顏色對話框getColor獲得用戶選擇的顏色值QFontDialog類標(biāo)準(zhǔn)字體對話框getFont獲得用戶選擇的字體QInputDialog類標(biāo)準(zhǔn)輸入對話框getText標(biāo)準(zhǔn)字符串輸入對話框getItem下拉表條目輸入框getIntint類型數(shù)據(jù)輸入對話框getDoubledouble類型數(shù)據(jù)輸入對話框QMessageBox類標(biāo)準(zhǔn)消息對話框QMessageBox::questionQuestion消息框QMessageBox::informationInformation消息框QMessageBox::warningWarning消息框QMessageBox::criticalCritical消息框QMessageBox::aboutAbout消息框QMessageBox::aboutQtAboutQt消息框Qt5基本對話框及實例【例】(難度一般)(CH401)完成如圖4.1所示的界面顯示。操作步驟如下。以“直接編寫代碼”(即取消勾選“Generateform”復(fù)選框)方式創(chuàng)建Qt項目,項目名DialogExample,“ClassInformation”頁基類選“QDialog”,類名保持Dialog不變。在dialog.cpp文件中的Dialog的構(gòu)造函數(shù)中應(yīng)該添加如下代碼:setWindowTitle(tr("各種標(biāo)準(zhǔn)對話框的實例"));QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——標(biāo)準(zhǔn)文件對話框類01函數(shù)說明函數(shù)說明QFileDialog類的幾個靜態(tài)函數(shù)見表4.1,用戶通過這些函數(shù)可以很方便地定制自己的文件對話框。其中,getOpenFileName()靜態(tài)函數(shù)返回用戶選擇的文件名。但是,當(dāng)用戶選擇文件時,若選擇“取消”(Cancel),則返回一個空串。在此僅詳細說明getOpenFileName()靜態(tài)函數(shù)中各個參數(shù)的作用,其他文件對話框類中相關(guān)的靜態(tài)函數(shù)的參數(shù)有與其類似之處。其函數(shù)形式如下:QStringQFileDialog::getOpenFileName( QWidget*parent=0, //標(biāo)準(zhǔn)文件對話框的父窗口 constQString&caption=QString(), //標(biāo)準(zhǔn)文件對話框的標(biāo)題名 constQString&dir=QString(), //注(1) constQString&filter=QString(), //注(2) QString*selectedFilter=0, //用戶選擇的過濾器通過此參數(shù)返回 Optionsoptions=0 //選擇顯示文件名的格式,默認(rèn)是同時顯示目錄與文件名)02創(chuàng)建步驟創(chuàng)建步驟(1)在dialog.h中,添加private成員變量如下:QPushButton*fileBtn;QLineEdit*fileLineEdit;QGridLayout*mainLayout;(2)添加槽函數(shù):privateslots: voidshowFile();在開始部分添加頭文件:#include<QLineEdit>#include<QGridLayout>創(chuàng)建步驟(3)在dialog.cpp文件的構(gòu)造函數(shù)中添加如下代碼:fileBtn=newQPushButton; //各個控件對象的初始化fileBtn->setText(tr("文件標(biāo)準(zhǔn)對話框?qū)嵗?));fileLineEdit=newQLineEdit; //用來顯示選擇的文件名添加布局管理:mainLayout=newQGridLayout(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)創(chuàng)建步驟其中,槽函數(shù)showFile()的具體實現(xiàn)代碼如下:voidDialog::showFile(){QStrings=QFileDialog::getOpenFileName(this,"openfiledialog","/","C++files(*.cpp);;Cfiles(*.c);;Headfiles(*.h)");fileLineEdit->setText(s);}在dialog.cpp文件的開始部分添加頭文件:#include<QGridLayout>#include<QFileDialog>#include<QPushButton>創(chuàng)建步驟(4)運行該程序后,單擊“文件標(biāo)準(zhǔn)對話框?qū)嵗卑粹o后顯示的界面如圖。選擇某個文件,單擊“打開”按鈕,此文件名及其所在目錄將顯示在Dialog對話框右邊的標(biāo)簽中。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——標(biāo)準(zhǔn)顏色對話框類01函數(shù)說明函數(shù)說明getColor()函數(shù)是標(biāo)準(zhǔn)顏色對話框QColorDialog類的一個靜態(tài)函數(shù),該函數(shù)返回用戶選擇的顏色值。下面是getColor()函數(shù)形式:QColorgetColor( constQColor&initial=Qt::white, //注 QWidget*parent=0 //標(biāo)準(zhǔn)顏色對話框的父窗口);02創(chuàng)建步驟創(chuàng)建步驟(1)在dialog.h中,添加private成員變量如下:QPushButton*colorBtn;QFrame*colorFrame;(2)添加槽函數(shù):voidshowColor();(3)在dialog.cpp文件的構(gòu)造函數(shù)中添加如下代碼:colorBtn=newQPushButton; //創(chuàng)建各個控件的對象colorBtn->setText(tr("顏色標(biāo)準(zhǔn)對話框?qū)嵗?));colorFrame=newQFrame;colorFrame->setFrameShape(QFrame::Box);colorFrame->setAutoFillBackground(true);創(chuàng)建步驟在布局管理中添加代碼:mainLayout->addWidget(colorBtn,1,0); //布局設(shè)計mainLayout->addWidget(colorFrame,1,1);最后添加事件關(guān)聯(lián):connect(colorBtn,SIGNAL(clicked()),this,SLOT(showColor())); //事件關(guān)聯(lián)其中,槽函數(shù)showColor()的實現(xiàn)代碼如下:voidDialog::showColor(){QColorc=QColorDialog::getColor(Qt::blue);if(c.isValid()){colorFrame->setPalette(QPalette(c));}}創(chuàng)建步驟(4)在文件的開始部分添加頭文件:#include<QColorDialog>(5)運行該程序后,單擊“顏色標(biāo)準(zhǔn)對話框?qū)嵗卑粹o后顯示的界面如圖。選擇某個顏色,單擊“OK”按鈕,選擇的顏色將顯示在Dialog對話框右邊的標(biāo)簽中。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——

標(biāo)準(zhǔn)字體對話框類01函數(shù)說明函數(shù)說明getFont()函數(shù)是標(biāo)準(zhǔn)字體對話框QFontDialog類的一個靜態(tài)函數(shù),該函數(shù)返回用戶所選擇的字體,下面是getFont()函數(shù)形式:QFontgetFont( bool*ok, //注 QWidget*parent=0 //標(biāo)準(zhǔn)字體對話框的父窗口);02創(chuàng)建步驟創(chuàng)建步驟(1)在dialog.h中,添加private成員變量如下:QPushButton*fontBtn;QLineEdit*fontLineEdit;(2)添加槽函數(shù):voidshowFont();(3)在dialog.cpp文件的構(gòu)造函數(shù)中添加如下代碼:fontBtn=newQPushButton; //創(chuàng)建控件的對象fontBtn->setText(tr("字體標(biāo)準(zhǔn)對話框?qū)嵗?));fontLineEdit=newQLineEdit; //顯示更改的字符串fontLineEdit->setText(tr("Welcome!"));添加布局管理:mainLayout->addWidget(fontBtn,2,0); //布局設(shè)計mainLayout->addWidget(fontLineEdit,2,1);創(chuàng)建步驟最后添加事件關(guān)聯(lián):connect(fontBtn,SIGNAL(clicked()),this,SLOT(showFont())); //事件關(guān)聯(lián)其中,槽函數(shù)showFont()的實現(xiàn)代碼如下:voidDialog::showFont(){boolok;QFontf=QFontDialog::getFont(&ok);if(ok){fontLineEdit->setFont(f);}}創(chuàng)建步驟(4)在文件的開始部分添加頭文件:#include<QFontDialog>(5)運行該程序后,單擊“字體標(biāo)準(zhǔn)對話框?qū)嵗卑粹o后顯示的界面如圖。選擇某個字體,單擊“OK”按鈕,文字將應(yīng)用選擇的字體格式更新顯示在Dialog對話框右邊的標(biāo)簽中。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——標(biāo)準(zhǔn)輸入對話框類標(biāo)準(zhǔn)輸入對話框類下面的例子演示了各種標(biāo)準(zhǔn)輸入框的使用方法,首先完成界面的設(shè)計。具體操作步驟如下。(1)在DialogExample項目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”選項,在彈出的對話框中選擇“C++Class”選項,單擊“Choose...”按鈕,在彈出的對話框的“Baseclass”文本框中輸入基類名“QDialog”(需要由用戶手動輸入),在“Classname”文本框中輸入類的名稱“InputDlg”。(2)單擊“下一步”按鈕,單擊“完成”按鈕,在該工程中就添加了“inputdlg.h”頭文件和“inputdlg.cpp”源文件。(3)打開inputdlg.h頭文件,完成所需要的各種控件的創(chuàng)建和各種功能的槽函數(shù)的聲明,具體代碼。(4)打開inputdlg.cpp源文件,完成所需要的各種控件的創(chuàng)建和槽函數(shù)的實現(xiàn),具體代碼。標(biāo)準(zhǔn)輸入對話框類完成主對話框的操作過程如下。(1)在dialog.h中,添加頭文件:#include"inputdlg.h"添加private成員變量:QPushButton*inputBtn;添加實現(xiàn)標(biāo)準(zhǔn)輸入對話框?qū)嵗腎nputDlg類:InputDlg*inputDlg;(2)添加槽函數(shù):voidshowInputDlg();標(biāo)準(zhǔn)輸入對話框類(3)在dialog.cpp文件的構(gòu)造函數(shù)中添加如下代碼:inputBtn=newQPushButton; //創(chuàng)建控件的對象inputBtn->setText(tr("標(biāo)準(zhǔn)輸入對話框?qū)嵗?));添加布局管理:mainLayout->addWidget(inputBtn,3,0); //布局設(shè)計最后添加事件關(guān)聯(lián):connect(inputBtn,SIGNAL(clicked()),this,SLOT(showInputDlg()));其中,槽函數(shù)showInputDlg()的實現(xiàn)代碼如下:voidDialog::showInputDlg(){inputDlg=newInputDlg(this);inputDlg->show();}標(biāo)準(zhǔn)輸入對話框類(4)運行該程序后,單擊“標(biāo)準(zhǔn)輸入對話框?qū)嵗卑粹o后顯示的界面如圖所示。01標(biāo)準(zhǔn)字符串輸入對話框標(biāo)準(zhǔn)字符串輸入對話框標(biāo)準(zhǔn)字符串輸入對話框通過QInputDialog類的靜態(tài)函數(shù)getText()完成,getText()函數(shù)形式如下:QStringgetText( QWidget*parent, //標(biāo)準(zhǔn)輸入對話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對話框的標(biāo)簽提示 QLineEdit::EchoModemode=QLineEdit::Normal, //指定標(biāo)準(zhǔn)輸入對話框中QLineEdit控件的輸入模式 constQString&text=QString(), //標(biāo)準(zhǔn)字符串輸入對話框彈出時QLineEdit控件中默認(rèn)出現(xiàn)的文字 bool*ok=0, //注 Qt::WindowFlagsflags=0 //指明標(biāo)準(zhǔn)輸入對話框的窗體標(biāo)識);標(biāo)準(zhǔn)字符串輸入對話框接著上述的程序,完成inputdlg.cpp文件中的槽函數(shù)ChangeName()的實現(xiàn)。具體代碼如下:voidInputDlg::ChangeName(){boolok;QStringtext=QInputDialog::getText(this,tr("標(biāo)準(zhǔn)字符串輸入對話框"),tr("請輸入姓名:"),QLineEdit::Normal,nameLabel2->text(),&ok);if(ok&&!text.isEmpty())nameLabel2->setText(text);}在inputdlg.cpp文件的開始部分添加頭文件:#include<QInputDialog>再次運行程序,單擊“修改姓名”按鈕后出現(xiàn)對話框,可以在該對話框內(nèi)修改姓名,如圖。02標(biāo)準(zhǔn)條目選擇對話框標(biāo)準(zhǔn)條目選擇對話框標(biāo)準(zhǔn)條目選擇對話框是通過QInputDialog類的靜態(tài)函數(shù)getItem()來完成的,getItem()函數(shù)形式如下:QStringgetItem( QWidget*parent, //標(biāo)準(zhǔn)輸入對話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對話框的標(biāo)簽提示 constQStringList&items, //注(1) intcurrent=0, //注(2) booleditable=true, //指定QComboBox控件中顯示的文字是否可編輯 bool*ok=0, //注(3) Qt::WindowFlagsflags=0//指明標(biāo)準(zhǔn)輸入對話框的窗體標(biāo)識);標(biāo)準(zhǔn)條目選擇對話框同上,接著上述的程序,完成inputdlg.cpp文件中的槽函數(shù)ChangeSex()的實現(xiàn)。具體代碼如下:voidInputDlg::ChangeSex(){ QStringListSexItems; SexItems<<tr("男")<<tr("女"); boolok; QStringSexItem=QInputDialog::getItem(this,tr("標(biāo)準(zhǔn)條目選擇對話框"),tr("請選擇性別:"),SexItems,0,false,&ok); if(ok&&!SexItem.isEmpty()) sexLabel2->setText(SexItem);}再次運行程序,單擊“修改性別”按鈕后出現(xiàn)對話框,可以在該對話框內(nèi)選擇性別,如圖。03標(biāo)準(zhǔn)int類型輸入對話框標(biāo)準(zhǔn)int類型輸入對話框標(biāo)準(zhǔn)int類型輸入對話框是通過QInputDialog類的靜態(tài)函數(shù)getInt()來完成的,getInt()函數(shù)形式如下:intgetInt( QWidget*parent, //標(biāo)準(zhǔn)輸入對話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對話框的標(biāo)簽提示 intvalue=0, //指定標(biāo)準(zhǔn)輸入對話框中QSpinBox控件的默認(rèn)顯示值 intmin=-2147483647, //指定QSpinBox控件的數(shù)值范圍 intmax=2147483647, intstep=1, //指定QSpinBox控件的步進值 bool*ok=0, //注 Qt::WindowFlagsflags=0 //指明標(biāo)準(zhǔn)輸入對話框的窗口標(biāo)識);標(biāo)準(zhǔn)int類型輸入對話框同上,接著上述的程序,完成inputdlg.cpp文件中的槽函數(shù)ChangeAge()的實現(xiàn)。具體代碼如下:

voidInputDlg::ChangeAge(){ boolok; intage=QInputDialog::getInt(this,tr("標(biāo)準(zhǔn)int類型輸入對話框"),tr("請輸入年齡:"),ageLabel2->text().toInt(&ok),0,100,1,&ok); if(ok) ageLabel2->setText(QString(tr("%1")).arg(age));}再次運行程序,單擊“修改年齡”按鈕后出現(xiàn)對話框,可以在該對話框內(nèi)修改年齡,如圖。04標(biāo)準(zhǔn)double類型輸入對話框標(biāo)準(zhǔn)double類型輸入對話框標(biāo)準(zhǔn)double類型輸入對話框是通過QInputDialog類的靜態(tài)函數(shù)getDouble()來完成的,getDouble()函數(shù)形式如下:doublegetDouble( QWidget*parent, //標(biāo)準(zhǔn)輸入對話框的父窗口 constQString&title, //標(biāo)準(zhǔn)輸入對話框的標(biāo)題名 constQString&label, //標(biāo)準(zhǔn)輸入對話框的標(biāo)簽提示 doublevalue=0, //指定標(biāo)準(zhǔn)輸入對話框中QSpinBox控件默認(rèn)的顯示值 doublemin=-2147483647,//指定QSpinBox控件的數(shù)值范圍 doublemax=2147483647, intdecimals=1, //指定QSpinBox控件的步進值 bool*ok=0, //注 Qt::WindowFlagsflags=0//指明標(biāo)準(zhǔn)輸入對話框的窗口標(biāo)識);標(biāo)準(zhǔn)double類型輸入對話框同上,接著上述的程序,完成inputdlg.cpp文件中槽函數(shù)ChangeScore()的實現(xiàn)。具體代碼如下:voidInputDlg::ChangeScore(){ boolok; doublescore=QInputDialog::getDouble(this,tr("標(biāo)準(zhǔn)double類型輸入對話框"),tr("請輸入成績:"),scoreLabel2->text().toDouble(&ok),0,100,1,&ok); if(ok) scoreLabel2->setText(QString(tr("%1")).arg(score));}再次運行程序,單擊“修改成績”按鈕后出現(xiàn)對話框,可以在該對話框內(nèi)修改成績,如圖。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——消息對話框類消息對話框類(1)添加該工程的提供主要顯示標(biāo)準(zhǔn)消息對話框界面的函數(shù)所在的文件,在DialogExample項目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”選項,在彈出的對話框中選擇“C++Class”選項,單擊“Choose...”按鈕,在彈出的對話框的“Baseclass”下拉列表框中輸入基類名“QDialog”,在“Classname”文本框中輸入類的名稱“MsgBoxDlg”。(2)單擊“下一步”按鈕,單擊“完成”按鈕,在該工程中就添加了“msgboxdlg.h”頭文件和“msgboxdlg.cpp”源文件。(3)打開msgboxdlg.h頭文件,完成所需要的各種控件的創(chuàng)建和完成功能的槽函數(shù)的聲明,具體代碼。(4)打開msgboxdlg.cpp源文件,完成所需要的各種控件的創(chuàng)建和完成槽函數(shù)的實現(xiàn),具體代碼。消息對話框類下面是完成主對話框的操作過程。(1)在dialog.h中,添加頭文件:#include"msgboxdlg.h"添加private成員變量如下:QPushButton*MsgBtn;添加實現(xiàn)各種消息對話框?qū)嵗腗sgBoxDlg類:MsgBoxDlg*msgDlg;(2)添加槽函數(shù):voidshowMsgDlg();消息對話框類(3)在dialog.cpp文件的構(gòu)造函數(shù)中添加如下代碼:MsgBtn=newQPushButton;//創(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)代碼如下:voidDialog::showMsgDlg(){msgDlg=newMsgBoxDlg();msgDlg->show();}消息對話框類(4)運行該程序后,單擊“標(biāo)準(zhǔn)消息對話框?qū)嵗卑粹o后,顯示效果如圖。01Question消息框Question消息框Question消息框使用QMessageBox::question()函數(shù)完成,該函數(shù)形式如下:StandardButtonQMessageBox::question( QWidget*parent, //消息框的父窗口指針 constQString&title, //消息框的標(biāo)題欄 constQString&text, //消息框的文字提示信息 StandardButtonsbuttons=Ok, //注(1) StandardButtondefaultButton=NoButton //注(2));Question消息框?qū)崿F(xiàn)文件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的開始部分添加頭文件:#include<QMessageBox>Question消息框運行程序,單擊“QuestionMsg”按鈕后,顯示效果如圖。02Information消息框Information消息框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消息框測試,歡迎您!"));return;}Information消息框運行程序,單擊“InformationMsg”按鈕后,顯示效果如圖。03Warning消息框Warning消息框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)容);Warning消息框?qū)崿F(xiàn)文件msgboxdlg.cpp中的槽函數(shù)showWarningMsg(),具體代碼如下:voidMsgBoxDlg::showWarningMsg(){label->setText(tr("WarningMessageBox"));switch(QMessageBox::warning(this,tr("Warning消息框"),tr("您修改的內(nèi)容還未保存,是否要保存對文檔的修改?"),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;}Warning消息框運行程序,單擊“WarningMsg”按鈕后,顯示效果如圖。04Critical消息框Critical消息框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)容);實現(xiàn)文件msgboxdlg.cpp中的槽函數(shù)showCriticalMsg(),具體代碼如下:voidMsgBoxDlg::showCriticalMsg(){ label->setText(tr("CriticalMessageBox")); QMessageBox::critical(this,tr("Critical消息框"),tr("這是一個Critical消息框測試!")); return;}Critical消息框運行程序,單擊“CriticalMsg”按鈕后,顯示效果如圖。05About消息框About消息框About消息框使用QMessageBox::about()函數(shù)完成,該函數(shù)形式如下:voidQMessageBox::about( QWidget*parent, //消息框的父窗口指針 constQString&title, //消息框的標(biāo)題欄 constQString&text //消息框的文字提示信息);實現(xiàn)文件msgboxdlg.cpp中的槽函數(shù)showAboutMsg(),具體代碼如下:voidMsgBoxDlg::showAboutMsg(){ label->setText(tr("AboutMessageBox")); QMessageBox::about(this,tr("About消息框"),tr("這是一個About消息框測試!")); return;}運行程序,單擊“AboutMsg”按鈕后,顯示效果如圖。06AboutQt消息框AboutQt消息框AboutQt消息框使用QMessageBox::aboutQt()函數(shù)完成,該函數(shù)形式如下:voidQMessageBox::aboutQt( QWidget*parent, //消息框的父窗口指針 constQString&title=QString() //消息框的標(biāo)題欄);實現(xiàn)文件msgboxdlg.cpp中的槽函數(shù)showAboutQtMsg(),具體代碼如下:voidMsgBoxDlg::showAboutQtMsg(){label->setText(tr("AboutQtMessageBox"));QMessageBox::aboutQt(this,tr("AboutQt消息框"));return;}AboutQt消息框運行程序,單擊“AboutQtMsg”按鈕后,顯示效果如圖。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——自定義消息框自定義消息框(1)在dialog.h中添加private成員變量:QPushButton*CustomBtn;QLabel*label;(2)添加槽函數(shù):voidshowCustomDlg();(3)在dialog.cpp的構(gòu)造函數(shù)中添加如下代碼:CustomBtn=newQPushButton;CustomBtn->setText(tr("用戶自定義消息對話框?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()));自定義消息框其中,dialog.cpp文件中的槽函數(shù)showCustomDlg()實現(xiàn)的具體代碼如下:voidDialog::showCustomDlg(){ label->setText(tr("CustomMessageBox")); QMessageBoxcustomMsgBox; customMsgBox.setWindowTitle(tr("用戶自定義消息框")); //設(shè)置消息框的標(biāo)題 QPushButton

*yesBtn=customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole); //(a) QPushButton

*noBtn=customMsgBox.addButton(tr("No"),QMessageBox::ActionRole); QPushButton*cancelBtn=customMsgBox.addButton(QMessageBox::Cancel); //(b) customMsgBox.setText(tr("這是一個用戶自定義消息框!")); //(c) customMsgBox.setIconPixmap(QPixmap("Qt.png")); //(d) customMsgBox.exec(); //顯示此自定義消息框 if(customMsgBox.clickedButton()==yesBtn) label->setText("CustomMessageBox/Yes"); if(customMsgBox.clickedButton()==noBtn) label->setText("CustomMessageBox/No"); if(customMsgBox.clickedButton()==cancelBtn) label->setText("CustomMessageBox/Cancel");return;}在開始部分添加頭文件:#include<QMessageBox>自定義消息框(4)為了能夠在自定義消息框中顯示Qt圖標(biāo),請將事先準(zhǔn)備好的圖片Qt.png復(fù)制到項目debug目錄下。運行該程序后,單擊“用戶自定義消息對話框?qū)嵗卑粹o后,顯示效果如圖。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——工具盒類工具盒類【例】(難度一般)(CH402)通過實現(xiàn)類似QQ抽屜效果的實例來介紹QToolBox類的使用,運行效果如圖。工具盒類(1)以“直接編寫代碼”(即取消勾選“Generateform”復(fù)選框)方式創(chuàng)建Qt項目,項目名MyQQExample,“ClassInformation”頁基類選“QDialog”。(2)添加該工程的提供主要顯示界面的函數(shù)所在的文件,在MyQQExample項目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”選項,在彈出的對話框中選擇“C++Class”選項。單擊“Choose...”按鈕,在彈出的對話框的“Baseclass”文本框中輸入基類名“QToolBox”(手工添加),在“Classname”文本框中輸入類的名稱“Drawer”。(3)單擊“下一步”按鈕,單擊“完成”按鈕,添加“drawer.h”頭文件和“drawer.cpp”源文件。工具盒類(4)Drawer類繼承自QToolBox類,打開drawer.h頭文件,定義實例中需要用到的各種窗體控件。具體代碼如下:#include<QToolBox>#include<QToolButton>classDrawer:publicQToolBox{ Q_OBJECTpublic: 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;};工具盒類(5)打開drawer.cpp源文件,添加以下代碼。(6)在drawer.cpp文件的開頭加入以下頭文件:#include<QGroupBox>#include<QVBoxLayout>(7)打開main.cpp文件,添加以下代碼:#include"dialog.h"#include<QApplication>#include"drawer.h"intmain(intargc,char*argv[]){QApplicationa(argc,argv);Drawerdrawer;drawer.show();returna.exec();}(8)將需用到的圖片放置到項目debug目錄下,運行程序。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——進

條進

條Qt提供了兩種顯示進度條的方式:一種是QProgressBar,提供了一種橫向或縱向顯示進度的控件表示方式,用來描述任務(wù)的完成情況;另一種是QProgressDialog,提供了一種針對慢速過程的進度對話框表示方式,用于描述任務(wù)完成的進度情況。標(biāo)準(zhǔn)的進度條對話框包括一個進度顯示條、一個“取消(Cancel)”按鈕及一個標(biāo)簽?!纠浚ê唵危–H403)實現(xiàn)圖中的顯示進度條。

條實現(xiàn)步驟如下。(1)以“直接編寫代碼”(即取消勾選“Generateform”復(fù)選框)方式創(chuàng)建Qt項目,項目名Progress,“ClassInformation”頁基類選“QDialog”,類名命名為ProgressDlg。(2)ProgressDlg類繼承自QDialog類,打開progressdlg.h頭文件,添加如下加黑代碼://添加的頭文件#include<QLabel>#include<QLineEdit>#include<QProgressBar>#include<QComboBox>#include<QPushButton>#include<QGridLayout>classProgressDlg:publicQDialog{ Q_OBJECTpublic: ProgressDlg(QWidget*parent=0); ~ProgressDlg();privateslots:

voidstartProgress();private:

QLabel*FileNum;

QLineEdit*FileNumLineEdit;

QLabel*ProgressType;

QComboBox*comboBox;

QProgressBar*progressBar;

QPushButton*starBtn;

QGridLayout*mainLayout;};進

條(3)構(gòu)造函數(shù)主要完成主界面的初始化工作,包括各控件的創(chuàng)建、布局及信號/槽的連接。打開progressdlg.cpp文件,添加以下代碼。其中,槽函數(shù)startProgress()的具體代碼。(4)運行程序,查看顯示效果。QProgressBar類有如下幾個重要的屬性。

minimum、maximum:決定進度條指示的最小值和最大值。

format:決定進度條顯示文字的格式,可以有三種顯示格式,即%p%、%v和%m。其中,%p%顯示完成的百分比,這是默認(rèn)顯示方式;%v顯示當(dāng)前的進度值;%m顯示總的步進值。

invertedAppearance:可以使進度條以反方向顯示進度。QT5開發(fā)及實例(第5版)第4章Qt5基本對話框及實例——調(diào)色板與電子鐘01調(diào)色板類:QPalette調(diào)色板類:QPaletteQPalette類的使用方法,該類有兩個基本的概念:一個是ColorGroup,另一個是ColorRole。其中,ColorGroup指的是以下三種不同的狀態(tài)。

QPalette::Active:獲得焦點的狀態(tài)。

QPalette::Inactive:未獲得焦點的狀態(tài)。

QPalette::Disable:不可用狀態(tài)。ColorRole指的是顏色主題,即對窗體中不同部位顏色的分類。例如,QPalette::Window是指背景色,QPalette::WindowText是指前景色,等等。QPalette類使用最多、最重要的函數(shù)是setColor()函數(shù),其原型如下:voidQPalette::setColor(ColorGroupgroup,ColorRolerole,constQColor&color);在對主題顏色進行設(shè)置的同時,還區(qū)分了狀態(tài),即對某個主題在某個狀態(tài)下的顏色進行了設(shè)置:voidQPalette::setColor(ColorRolerole,constQColor&color);只對某個主題的顏色進行設(shè)置,并不區(qū)分狀態(tài)。調(diào)色板類:QPalette【例】(難度一般)(CH404)利用QPalette改變控件顏色的方法。本實例實現(xiàn)的窗體分為兩部分:左半部分用于對不同主題顏色的選擇,右半部分用于顯示選擇的顏色對窗體外觀的改變。運行效果如圖。調(diào)色板類:QPalette實現(xiàn)步驟如下。(1)以“直接編寫代碼”(即取消勾選“Generateform”復(fù)選框)方式創(chuàng)建Qt項目,項目名Palette,“ClassInformation”頁基類選“QDialog”,類名命名為Palette。(2)定義的Palette類繼承自QDialog類,打開palette.h文件,聲明實例中所用到的函數(shù)和控件,具體代碼。(3)打開palette.cpp文件,添加以下代碼:#include<QHBoxLayout>#include<QGridLayout>Palette::Palette(QWidget*parent):QDialog(parent){createCtrlFrame();createContentFrame();QHBoxLayout*mainLayout=newQHBoxLayout(this);mainLayout->addWidget(ctrlFrame);mainLayout->addWidget(contentFrame);}createCtrlFrame()函數(shù)用于創(chuàng)建顏色選擇區(qū)。調(diào)色板類:QPalettecreateContentFrame()函數(shù)用于顯示選擇的顏色對窗體外觀的改變,具體代碼如下:voidPalette::createContentFrame(){ contentFrame=newQFrame; //具體顯示面板 label1=newQLabel(tr("請選擇一個值:")); comboBox1=newQComboBox; label2=newQLabel(tr("請輸入字符串:")); lineEdit2=newQLineEdit; textEdit=newQTextEdit; QGridLayout*TopLayout=newQGridLayout; TopLayout->addWidget(label1,0,0); TopLayout->addWidget(comboBox1,0,1); TopLayout->addWidget(label2,1,0); TopLayout->addWidget(lineEdit2,1,1); TopLayout->addWidget(textEdit,2,0,1,2); OkBtn=newQPushButton(tr("確認(rèn)")); CancelBtn=newQPushButton(tr("取消")); QHBoxLayout*BottomLayout=newQHBoxLayout; BottomLayout->addStretch(1); BottomLayout->addWidget(OkBtn); BottomLayout->addWidget(CancelBtn); QVBoxLayout*mainLayout=newQVBoxLayout(contentFrame); mainLayout->addLayout(TopLayout); mainLayout->addLayout(BottomLayout);}調(diào)色板類:QPaletteShowWindow()函數(shù)用于響應(yīng)對背景顏色的選擇:voidPalette::ShowWindow(){ //獲得當(dāng)前選擇的顏色值 QStringListcolorList=QColor::colorNames(); QColorcolor=QColor(colorList[windowComboBox->currentIndex()]); QPalettep=contentFrame->palette(); //(a) p.setColor(QPalette::Window,color); //(b) //把修改后的調(diào)色板信息應(yīng)用到contentFrame窗體中,更新顯示 contentFrame->setPalette(p); contentFrame->update();}調(diào)色板類:QPaletteShowWindowText()函數(shù)響應(yīng)對文字顏色的選擇,即對前景色進行設(shè)置,具體代碼如下:voidPalette::ShowWindowText(){QStringListcolorList=QColor::colorNames();QColorcolor=colorList[windowTextComboBox->currentIndex()];QPalettep=contentFrame->palette();p.setColor(QPalette::WindowText,color);contentFrame->setPalette(p);}ShowButton()函數(shù)響應(yīng)對按鈕背景色的選擇:voidPalette::ShowButton(){QStringListcolorList=QColor::colorNames();QColorcolor=QColor(colorList[buttonComboBox->currentIndex()]);QPalettep=contentFrame->palette();p.setColor(QPalette::Button,color);contentFrame->setPalette(p);contentFrame->update();}調(diào)色板類:QPaletteShowButtonText()函數(shù)響應(yīng)對按鈕上文字顏色的選擇:voidPalette::ShowButtonText(){QStringListcolorList=QColor::colorNames();QColorcolor=QColor(colorList[buttonTextComboBox->currentIndex()]);QPalettep=contentFrame->palette();p.setColor(QPalette::ButtonText,color);contentFrame->setPalette(p);}ShowBase()函數(shù)響應(yīng)對可輸入文本框背景色的選擇:voidPalette::ShowBase(){QStringListcolorList=QColor::colorNames();QColorcolor=QColor(colorList[baseComboBox->currentIndex()]);QPalettep=contentFrame->palette();p.setColor(QPalette::Base,color);contentFrame->setPalette(p);}調(diào)色板類:QPalettefillColorList()函數(shù)用于插入顏色:voidPalette::fillColorList(QComboBox*comboBox){ QStringListcolorList=QColor::colorNames(); //(a) QStringcolor; //(b) foreach(color,colorList) //對顏色名列表進行遍歷 { QPixmappix(QSize(70,20)); //(c) pix.fill(QColor(color)); //為pix填充當(dāng)前遍歷的顏色 comboBox->addItem(QIcon(pix),NULL); //(d) comboBox->setIconSize(QSize(70,20)); //(e) comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); //(f) }}02時間類:QTime時間類:QTime為了便于顯示,toString()函數(shù)的參數(shù)需指定轉(zhuǎn)換后時間的顯示格式。

H/h:小時(若使用H表示小時,則無論何時都以24小時制顯示小時;若使用h表示小時,則當(dāng)同時指定AM/PM時,采用12小時制顯示小時,其他情況下仍采用24小時制進行顯示)。

m:分。

s:秒。

AP/A:顯示AM或PM。

Ap/a:顯示am或pm??筛鶕?jù)實際顯示需要進行格式設(shè)置,例如:hh:mm:ssA22:30:08PMH:mm:sa10:30:8pm03電子時鐘實例電子時鐘實例【例】(難度一般)(CH405)通過實現(xiàn)顯示于桌面上并可隨意拖曳至桌面任意位置的電子時鐘綜合實例,實踐QPalette類、QTime類和mousePressEvent/mouseMoveEvent類的用法。實現(xiàn)步驟如下。(1)以“直接編寫代碼”(即取消勾選“Generateform”復(fù)選框)方式創(chuàng)建Qt項目,項目名Clock,“ClassInformation”頁基類選“QDialog”。(2)添加該工程的提供主要顯示界面的函數(shù)所在的文件,在Clock項目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”選項,在彈出的對話框中選擇“C++Class”選項,單擊“Choose...”按鈕,在彈出的對話框的“Baseclass”文本框中輸入基類名“QLCDNumber”(手工添加),在“Classname”文本框中輸入類的名稱“DigiClock”。(3)單擊“下一步”按鈕,單擊“完成”按鈕,添加“digiclock.h”頭文件和“digiclock.cpp”源文件。電子時鐘實例(4)DigiClock類繼承自QLCDNumber類,該類中重定義了鼠標(biāo)按下事件和鼠標(biāo)移動事件以使電子時鐘可隨意拖曳,同時還定義了相關(guān)的槽函數(shù)和私有變量。打開digiclock.h文件,添加如下代碼:#include<QLCDNumber>classDigiClock:publicQLCDNumber{ Q_OBJECTpublic: DigiClock(QWidget*parent=0); voidmousePressEvent(QMouseEvent*); voidmouseMoveEvent(QMouseEvent*);publicslots: voidshowTime();//顯示當(dāng)前的時間private: QPointdragPosition;//保存鼠標(biāo)點相對電子時鐘窗體左上角的偏移值 boolshowColon;//用于顯示時間時是否顯示“:”};電子時鐘實例(5)在DigiClock的構(gòu)造函數(shù)中,完成外觀的設(shè)置及定時器的初始化工作,打開digiclock.cpp文件,添加下列代碼://添加的頭文件#include<QTimer>#include<QTime>#include<QMouseEvent>DigiClock::DigiClock(QWidget*parent):QLCDNumber(parent){/*設(shè)置時鐘背景*/ //(a)QPalettep=palette();p.setColor(QPalette::Window,Qt::blue);setPalette(p);setWindowFlags(Qt::FramelessWindowHint); //(b)setWindowOpacity(0.5); //(c)QTimer*timer=newQTimer(this); //新建一個定時器對象connect(timer,SIGNAL(timeout()),this,SLOT(showTime())); //(d)timer->start(1000); //(e)showTime(); //初始時間顯示resize(150,60); //設(shè)置電子時鐘顯示的尺寸showColon=true; //初始化}電子時鐘實例槽函數(shù)showTime()完成電子鐘的顯示時間的功能,代碼如下:

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論