在一個(gè)完整的應(yīng)用程序設(shè)計(jì)中,不可避免地會(huì)涉及多個(gè)窗體、對(duì)話框的設(shè)計(jì)和調(diào)用,如何設(shè)計(jì)和調(diào)用這些對(duì)話框和窗體是搞清楚一個(gè)龐大的應(yīng)用程序設(shè)計(jì)的基礎(chǔ)。本章將介紹對(duì)話框和多窗體設(shè)計(jì)、調(diào)用方式、數(shù)據(jù)傳遞等問(wèn)題,主要包括以下幾點(diǎn)。
- Qt 提供的標(biāo)準(zhǔn)對(duì)話框的使用,如
打開文件對(duì)話框、選擇顏色對(duì)話框、字體對(duì)話框、消息 提示和確認(rèn)選擇對(duì)話框
等 - 自定義對(duì)話框的設(shè)計(jì)和調(diào)用,如何獲取返回值,在對(duì)話框中如何操作主窗體等。
- 在一個(gè)應(yīng)用程序中如何設(shè)計(jì)多種窗體,基于 QDialog、QWidget 和 QMainWindow 創(chuàng)建的窗體的調(diào)用方式有哪些,它們之間有什么區(qū)別。
- 如何創(chuàng)建一個(gè)在多頁(yè)組件中管理的多窗體應(yīng)用,類似于現(xiàn)在流行的多頁(yè)瀏覽器的界面效果,子窗體如何與主窗體實(shí)現(xiàn)交互。
- 如何創(chuàng)建MDI(Multi-document interface)應(yīng)用程序。
- 如何創(chuàng)建一個(gè)帶有啟動(dòng)界面(Splash)和登錄界面的窗體,如何保存和讀取應(yīng)用程序設(shè)置的參數(shù)
1. 標(biāo)準(zhǔn)對(duì)話框概述
**Qt為應(yīng)用程序設(shè)計(jì)提供了一些常用的標(biāo)準(zhǔn)對(duì)話框,如打開文件對(duì)話框、選擇顏色對(duì)話框、信息提示和確認(rèn)選擇對(duì)話框、標(biāo)準(zhǔn)輸入對(duì)話框
等,用戶無(wú)需再自己設(shè)計(jì)這些常用的對(duì)話框,這樣可以減少程序設(shè)計(jì)工作量。**在前面幾章的實(shí)例中,或多或少地用到了其中的一些對(duì)話框。
Qt 預(yù)定義的各標(biāo)準(zhǔn)對(duì)話框的類,及其主要靜態(tài)函數(shù)的功能見表 6-1(由于輸入?yún)?shù)一般較多,省略了函數(shù)的輸入?yún)?shù),只列出了函數(shù)的返回值類型)。
實(shí)例 samp6_1 演示使用這些對(duì)話框,程序運(yùn)行界面如圖6-1 所示。下方的文本框顯示打開文件的文件名或一些提示信息,某些對(duì)話框的輸入結(jié)果可應(yīng)用于文本框的屬性設(shè)置,如字體和顏色。
2. QFileDialog 對(duì)話框
2.1 選擇打開一個(gè)文件
若要打開一個(gè)文件,可調(diào)用靜態(tài)函數(shù) QFileDialog::getOpenFileName(),“打開一個(gè)文件”按鈕的響應(yīng)代碼如下:
void Dialog::on_btnOpen_clicked()
{ //選擇單個(gè)文件
QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
// QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
QString dlgTitle="選擇一個(gè)文件"; //對(duì)話框標(biāo)題
QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器
QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
ui->plainTextEdit->appendPlainText(aFileName);
}
QFileDialog::getOpenFileName()函數(shù)需要傳遞 3個(gè)字符串型參數(shù),分別如下。
對(duì)話框標(biāo)題,這里設(shè)置為"選擇一個(gè)文件”。
初始化目錄,打開對(duì)話框時(shí)的初始目錄,這里用 QDir::currentPath()獲取應(yīng)用程序當(dāng)前目錄。
文件過(guò)濾器,設(shè)置選擇不同后綴的文件,可以設(shè)置多組文件,如:
QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器
每組文件之間用兩個(gè)分號(hào)隔開,同一組內(nèi)不同后綴之間用空格隔開。
QFileDialog ::getOpenFileName()函數(shù)返回的是選擇文件的帶路徑的完整文件名,如果在對(duì)話框里取消選擇,則返回字符串為空。
2.2 選擇打開多個(gè)文件
若要選擇打開多個(gè)文件,可使用靜態(tài)函數(shù)QFileDialog::getOpenFileNames(),“打開多個(gè)文件"按鈕的響應(yīng)代碼如下:
void Dialog::on_btnOpenMulti_clicked()
{ //選擇多個(gè)文件
// QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
QString dlgTitle="選擇多個(gè)文件"; //對(duì)話框標(biāo)題
QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器
QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
for (int i=0; i<fileList.count();i++)
ui->plainTextEdit->appendPlainText(fileList.at(i));
}
getOpenFileNames()函數(shù)的傳遞參數(shù)與 getOpenFileName()一樣,只是返回值是一個(gè)字符串列表,列表的每一行是選擇的一個(gè)文件。
2.3 選擇已有目錄
選擇已有目錄可調(diào)用靜態(tài)函數(shù) QFileDialog::getExistingDirectory(),同樣,若需要傳遞對(duì)話框標(biāo)題和初始路徑,還應(yīng)傳遞一個(gè)選項(xiàng),一般用 QFileDialog::ShowDirsOnly,表示對(duì)話框中只顯示目錄。
void Dialog::on_btnSelDir_clicked()
{ //選擇文件夾
QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
// QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
//調(diào)用打開文件對(duì)話框打開一個(gè)文件
QString dlgTitle="選擇一個(gè)目錄"; //對(duì)話框標(biāo)題
QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
if (!selectedDir.isEmpty())
ui->plainTextEdit->appendPlainText(selectedDir);
}
靜態(tài)函數(shù) QCoreApplication::applicationDirPath()返回應(yīng)用程序可執(zhí)行文件所在的目錄,getExistingDirectory()函數(shù)的返回值是選擇的目錄名稱字符串。
2.4 選擇保存文件名
選擇一個(gè)保存文件,使用靜態(tài)函數(shù) QFileDialog::getSaveFileName(),傳遞的參數(shù)與 getOpenFileName()函數(shù)相同。只是在調(diào)用 getSaveFileName()函數(shù)時(shí),若選擇的是一個(gè)已經(jīng)存在的文件,會(huì)提示是否覆蓋原有的文件。如果提示覆蓋,會(huì)返回為選擇的文件,但是并不會(huì)對(duì)文件進(jìn)行實(shí)質(zhì)操作,對(duì)文件的刪除操作需要在選擇文件之后自己編碼實(shí)現(xiàn)。如下面的代碼,即使選擇覆蓋文件,由于代碼里沒(méi)有實(shí)質(zhì)地覆蓋原來(lái)的文件,也不會(huì)對(duì)選擇的文件造成任何影響。
void Dialog::on_btnSave_clicked()
{//保存文件
QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
QString dlgTitle="保存文件"; //對(duì)話框標(biāo)題
QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; //文件過(guò)濾器
QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
ui->plainTextEdit->appendPlainText(aFileName);
}
3. QColorDialog 對(duì)話框
QColorDialog 是選擇顏色對(duì)話框,選擇顏色使用靜態(tài)函數(shù) QColorDialog::getColor()。下面是“選擇顏色”按鈕的代碼,它為文本框的字體選擇顏色。
void Dialog::on_btnColor_clicked()
{
QPalette pal=ui->plainTextEdit->palette(); //獲取現(xiàn)有 palette
QColor iniColor=pal.color(QPalette::Text); //現(xiàn)有的文字顏色
QColor color=QColorDialog::getColor(iniColor,this,"選擇顏色");
if (color.isValid()) //選擇有效
{
pal.setColor(QPalette::Text,color); //palette 設(shè)置選擇的顏色
ui->plainTextEdit->setPalette(pal); //設(shè)置 palette
}
}
getColor()函數(shù)需要傳遞一個(gè)初始的顏色,這里是將 palette 提取的文本顏色作為初始顏色getColor()函數(shù)返回一個(gè)顏色變量,若在顏色對(duì)話框里取消選擇,則返回的顏色值無(wú)效,通過(guò)QColor::isValid()函數(shù)來(lái)判斷返回是否有效。
4. QFontDialog 對(duì)話框
QFontDialog 是選擇字體對(duì)話框,選擇字體使用靜態(tài)函數(shù)QFontDialog::getFont()。下面是“選擇字體”按鈕的代碼,它為文本框選擇字體,字體設(shè)置的內(nèi)容包括字體名稱、大小、粗體、斜體等。
void Dialog::on_btnFont_clicked()
{//選擇字體
QFont iniFont=ui->plainTextEdit->font(); //獲取文本框的字體
bool ok=false;
QFont font=QFontDialog::getFont(&ok,iniFont); //選擇字體
if (ok) //選擇有效
ui->plainTextEdit->setFont(font);
}
gctFont()返回一個(gè)字體變量,但是 QFont 沒(méi)有類似于 isValid()的函數(shù)來(lái)判斷有效性,所以在調(diào)用 getFont()函數(shù)時(shí)以引用方式傳遞一個(gè)邏輯變量 ok,調(diào)用后通過(guò)判斷 ok 是否為 true 來(lái)判斷字體選擇是否有效
。
5. QInputDialog 標(biāo)準(zhǔn)輸入對(duì)話框
QImputDialog 有單行字符串輸入、整數(shù)輸入、浮點(diǎn)數(shù)輸入、列表框選擇輸入和多行文本等多種輸入方式,圖 6-2 是其中 4 種界面效果。
5.1 輸入文字
QInputDialog::getText()函數(shù)顯示一個(gè)對(duì)話框用于輸入字符串,傳遞的參數(shù)包括對(duì)話框標(biāo)題、提示標(biāo)簽文字、缺省輸入、編輯框響應(yīng)模式等。
其中編輯框響應(yīng)模式是枚舉類型 QLineEdit::EchoMode,它控制編輯框上文字的顯示方式,正常情況下選擇QLineEdit::Normal; 如果是輸入密碼,選擇QLineEdit::Password。代碼如下:
void Dialog::on_btnInputString_clicked()
{ //輸入字符串
QString dlgTitle="輸入文字對(duì)話框";
QString txtLabel="請(qǐng)輸入文件名";
QString defaultInput="新建文件.txt";
QLineEdit::EchoMode echoMode=QLineEdit::Normal;//正常文字輸入
// QLineEdit::EchoMode echoMode=QLineEdit::Password;//密碼輸入
bool ok=false;
QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &ok);
if (ok && !text.isEmpty())
ui->plainTextEdit->appendPlainText(text);
}
5.2 輸入整數(shù)
使用QInputDialog::getInt()函數(shù)輸入一個(gè)整數(shù),下面的代碼為文本選擇字體大小。
void Dialog::on_btnInputInt_clicked()
{//輸入整數(shù)
QString dlgTitle="輸入整數(shù)對(duì)話框";
QString txtLabel="設(shè)置字體大小";
int defaultValue=ui->plainTextEdit->font().pointSize(); //現(xiàn)有字體大小
int minValue=6, maxValue=50,stepValue=1; //范圍,步長(zhǎng)
bool ok=false;
int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,
defaultValue, minValue,maxValue,stepValue,&ok);
if (ok) //是否確認(rèn)輸入
{
QFont font=ui->plainTextEdit->font();
font.setPointSize(inputValue);
ui->plainTextEdit->setFont(font);
}
}
輸入整數(shù)對(duì)話框使用一個(gè) SpinBox 組件輸入整數(shù),getInt()需要傳遞的參數(shù)包括數(shù)值大小范圍、步長(zhǎng)、初始值,確認(rèn)選擇輸入后,將輸入的整數(shù)值作為文本框字體的大小。
5.3 輸入浮點(diǎn)數(shù)
使用QInputDialog:: getDouble ()函數(shù)輸入一個(gè)浮點(diǎn)數(shù),輸入對(duì)話框使用一個(gè)QDoubleSpinBox作為輸入組件,getDouble ()的輸入?yún)?shù)需要輸入范圍、初始值、小數(shù)點(diǎn)位數(shù)等。代碼如下:
void Dialog::on_btnInputFloat_clicked()
{ //輸入浮點(diǎn)數(shù)
QString dlgTitle="輸入浮點(diǎn)數(shù)對(duì)話框";
QString txtLabel="輸入一個(gè)浮點(diǎn)數(shù)";
float defaultValue=3.13;
float minValue=0, maxValue=10000; //范圍
int decimals=2;//小數(shù)點(diǎn)位數(shù)
bool ok=false;
float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,
defaultValue, minValue,maxValue,decimals,&ok);
if (ok) //確認(rèn)選擇
{
QString str=QString::asprintf("輸入了一個(gè)浮點(diǎn)數(shù):%.2f",inputValue);
ui->plainTextEdit->appendPlainText(str);
}
}
5.4 下拉列表選擇輸入
使用QInputDialog::getItem()可以從一個(gè) ComboBox 組件的下拉列表中選擇輸入。代碼如下:
void Dialog::on_btnInputItem_clicked()
{ //條目選擇輸入
QStringList items; //ComboBox 列表的內(nèi)容
items <<"優(yōu)秀"<<"良好"<<"合格"<<"不合格";
QString dlgTitle="條目選擇對(duì)話框";
QString txtLabel="請(qǐng)選擇級(jí)別";
int curIndex=0; //初始選擇項(xiàng)
bool editable=true; //ComboBox是否可編輯
bool ok=false;
QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&ok);
if (ok && !text.isEmpty())
ui->plainTextEdit->appendPlainText(text);
}
getItem()函數(shù)需要一個(gè)QStringList 變量為其 ComboBox 組件做條目初始化,curIndex 指明初始選擇項(xiàng),editable 表示對(duì)話框里的 ComboBox 是否可編輯,若不能編輯,則只能在下拉列表中選擇
6. QMessageBox 消息對(duì)話框
6.1 簡(jiǎn)單信息提示
消息對(duì)話框 QMessageBox 用于顯示提示、警告、錯(cuò)誤等信息,或進(jìn)行確認(rèn)選擇,由幾個(gè)靜態(tài)函數(shù)實(shí)現(xiàn)這些功能(詳見表6-1)。其中 warning()、information()、critical()和 about()這幾個(gè)函數(shù)的輸入?yún)?shù)和使用方法相同,只是信息提示的圖標(biāo)有區(qū)別。例如,warning()的函數(shù)原型是:
QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
其中,parent 是對(duì)話框的父窗口,指定父窗口之后,打開對(duì)話框時(shí),對(duì)話框?qū)⒆詣?dòng)顯示在父窗口的上方中間位置;title 是對(duì)話框標(biāo)題字符串;text 是對(duì)話需要顯示的信息字符串;buttons 是對(duì)話框提供的按鈕,缺省只有一個(gè)OK 按鈕;defaultButton 是缺省選擇的按鈕,缺省表示沒(méi)有選擇。
warning()函數(shù)的返回結(jié)果是 StandardButton 類型。對(duì)話框上顯示的按鈕和缺省選中按鈕也是StandardButton 類型。
StandardButton 是各種按鈕的定義,如 OK、Yes、No、Cancel 等,其枚舉取值是QMessageBox::Ok、QMessageBox::Cancel、QMessageBox:Close 等,詳見Qt幫助文檔中的 StandardButton 類型的說(shuō)明。
對(duì)于 warning()、information()、critical()和 about()這幾種對(duì)話框,它們一般只有一個(gè)OK 按鈕,且無(wú)須關(guān)心對(duì)話框的返回值。所以,使用缺省的按鈕設(shè)置即可。例如,下面是程序中調(diào)用QMessageBox 信息顯示的代碼,顯示的幾個(gè)對(duì)話框如圖 6-3 所示。
void Dialog::on_btnMsgInformation_clicked()
{
QString dlgTitle="information消息框";
QString strInfo="文件已經(jīng)打開,字體大小已設(shè)置";
// QMessageBox::information(this, dlgTitle, strInfo);//使用缺省的按鈕
QMessageBox::information(this, dlgTitle, strInfo,
QMessageBox::Ok,QMessageBox::NoButton);
}
void Dialog::on_btnMsgWarning_clicked()
{
QString dlgTitle="warning 消息框";
QString strInfo="文件內(nèi)容已經(jīng)被修改";
QMessageBox::warning(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgCritical_clicked()
{
QString dlgTitle="critical消息框";
QString strInfo="有不明程序訪問(wèn)網(wǎng)絡(luò)";
QMessageBox::critical(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgAbout_clicked()
{
QString dlgTitle="about消息框";
QString strInfo="我開發(fā)的數(shù)據(jù)查看軟件 V1.0 \n 保留所有版權(quán)";
QMessageBox::about(this, dlgTitle, strInfo);
}
6.2 確認(rèn)選擇對(duì)話框
QMessageBox::question()函數(shù)用于打開一個(gè)選擇對(duì)話框,提示信息,并提供 Yes、No、OK、Cancel 等按鈕,用戶單擊某個(gè)按鈕返回選擇,如常見的文件保存確認(rèn)對(duì)話框如圖 6-4 所示。
靜態(tài)函數(shù) QMessageBox::question()的原型如下:
QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton)
question()對(duì)話框的關(guān)鍵是在其中可以選擇顯示多個(gè)按鈕,例如同時(shí)顯示 Yes、No、OK 或Cancel。其返回結(jié)果也是一個(gè) StandardButton 類型變量,表示哪個(gè)按鈕被單擊了。下面是產(chǎn)生如圖6-4所示對(duì)話框的代碼,并根據(jù)對(duì)話框選擇結(jié)果進(jìn)行了判斷和顯示。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-635665.html
void Dialog::on_btnMsgQuestion_clicked()
{
QString dlgTitle="Question消息框";
QString strInfo="文件已被修改,是否保存修改?";
QMessageBox::StandardButton defaultBtn=QMessageBox::NoButton; //缺省按鈕
QMessageBox::StandardButton result;//返回選擇的按鈕
result=QMessageBox::question(this, dlgTitle, strInfo,
QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,
defaultBtn);
if (result==QMessageBox::Yes)
ui->plainTextEdit->appendPlainText("Question消息框: Yes 被選擇");
else if(result==QMessageBox::No)
ui->plainTextEdit->appendPlainText("Question消息框: No 被選擇");
else if(result==QMessageBox::Cancel)
ui->plainTextEdit->appendPlainText("Question消息框: Cancel 被選擇");
else
ui->plainTextEdit->appendPlainText("Question消息框: 無(wú)選擇");
}
7. 源碼
7.1 可視化UI設(shè)計(jì)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-635665.html
7.2 dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_btnOpen_clicked();
void on_btnClearText_clicked();
void on_btnOpenMulti_clicked();
void on_btnSelDir_clicked();
void on_btnSave_clicked();
void on_btnColor_clicked();
void on_btnFont_clicked();
void on_btnInputString_clicked();
void on_btnInputInt_clicked();
void on_btnInputFloat_clicked();
void on_btnInputItem_clicked();
void on_btnMsgQuestion_clicked();
void on_btnMsgInformation_clicked();
void on_btnMsgWarning_clicked();
void on_btnMsgCritical_clicked();
void on_btnMsgAbout_clicked();
void on_btnMsgAboutQt_clicked();
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
7.3 dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QDir>
#include <QFileDialog>
#include <QColorDialog>
#include <QPalette>
#include <QFont>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QProgressDialog>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_btnOpen_clicked()
{ //選擇單個(gè)文件
QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
// QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
QString dlgTitle="選擇一個(gè)文件"; //對(duì)話框標(biāo)題
QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器
QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
ui->plainTextEdit->appendPlainText(aFileName);
}
void Dialog::on_btnClearText_clicked()
{
ui->plainTextEdit->clear();
}
void Dialog::on_btnOpenMulti_clicked()
{ //選擇多個(gè)文件
// QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
QString dlgTitle="選擇多個(gè)文件"; //對(duì)話框標(biāo)題
QString filter="文本文件(*.txt);;圖片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件過(guò)濾器
QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
for (int i=0; i<fileList.count();i++)
ui->plainTextEdit->appendPlainText(fileList.at(i));
}
void Dialog::on_btnSelDir_clicked()
{ //選擇文件夾
QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
// QString curPath=QDir::currentPath();//獲取系統(tǒng)當(dāng)前目錄
//調(diào)用打開文件對(duì)話框打開一個(gè)文件
QString dlgTitle="選擇一個(gè)目錄"; //對(duì)話框標(biāo)題
QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
if (!selectedDir.isEmpty())
ui->plainTextEdit->appendPlainText(selectedDir);
}
void Dialog::on_btnSave_clicked()
{//保存文件
QString curPath=QCoreApplication::applicationDirPath(); //獲取應(yīng)用程序的路徑
QString dlgTitle="保存文件"; //對(duì)話框標(biāo)題
QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; //文件過(guò)濾器
QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if (!aFileName.isEmpty())
ui->plainTextEdit->appendPlainText(aFileName);
}
void Dialog::on_btnColor_clicked()
{
QPalette pal=ui->plainTextEdit->palette(); //獲取現(xiàn)有 palette
QColor iniColor=pal.color(QPalette::Text); //現(xiàn)有的文字顏色
QColor color=QColorDialog::getColor(iniColor,this,"選擇顏色");
if (color.isValid()) //選擇有效
{
pal.setColor(QPalette::Text,color); //palette 設(shè)置選擇的顏色
ui->plainTextEdit->setPalette(pal); //設(shè)置 palette
}
}
void Dialog::on_btnFont_clicked()
{//選擇字體
QFont iniFont=ui->plainTextEdit->font(); //獲取文本框的字體
bool ok=false;
QFont font=QFontDialog::getFont(&ok,iniFont); //選擇字體
if (ok) //選擇有效
ui->plainTextEdit->setFont(font);
}
void Dialog::on_btnInputString_clicked()
{ //輸入字符串
QString dlgTitle="輸入文字對(duì)話框";
QString txtLabel="請(qǐng)輸入文件名";
QString defaultInput="新建文件.txt";
QLineEdit::EchoMode echoMode=QLineEdit::Normal;//正常文字輸入
// QLineEdit::EchoMode echoMode=QLineEdit::Password;//密碼輸入
bool ok=false;
QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &ok);
if (ok && !text.isEmpty())
ui->plainTextEdit->appendPlainText(text);
}
void Dialog::on_btnInputInt_clicked()
{//輸入整數(shù)
QString dlgTitle="輸入整數(shù)對(duì)話框";
QString txtLabel="設(shè)置字體大小";
int defaultValue=ui->plainTextEdit->font().pointSize(); //現(xiàn)有字體大小
int minValue=6, maxValue=50,stepValue=1; //范圍,步長(zhǎng)
bool ok=false;
int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,
defaultValue, minValue,maxValue,stepValue,&ok);
if (ok) //是否確認(rèn)輸入
{
QFont font=ui->plainTextEdit->font();
font.setPointSize(inputValue);
ui->plainTextEdit->setFont(font);
}
}
void Dialog::on_btnInputFloat_clicked()
{ //輸入浮點(diǎn)數(shù)
QString dlgTitle="輸入浮點(diǎn)數(shù)對(duì)話框";
QString txtLabel="輸入一個(gè)浮點(diǎn)數(shù)";
float defaultValue=3.13;
float minValue=0, maxValue=10000; //范圍
int decimals=2;//小數(shù)點(diǎn)位數(shù)
bool ok=false;
float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,
defaultValue, minValue,maxValue,decimals,&ok);
if (ok) //確認(rèn)選擇
{
QString str=QString::asprintf("輸入了一個(gè)浮點(diǎn)數(shù):%.2f",inputValue);
ui->plainTextEdit->appendPlainText(str);
}
}
void Dialog::on_btnInputItem_clicked()
{ //條目選擇輸入
QStringList items; //ComboBox 列表的內(nèi)容
items <<"優(yōu)秀"<<"良好"<<"合格"<<"不合格";
QString dlgTitle="條目選擇對(duì)話框";
QString txtLabel="請(qǐng)選擇級(jí)別";
int curIndex=0; //初始選擇項(xiàng)
bool editable=true; //ComboBox是否可編輯
bool ok=false;
QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&ok);
if (ok && !text.isEmpty())
ui->plainTextEdit->appendPlainText(text);
}
void Dialog::on_btnMsgQuestion_clicked()
{
QString dlgTitle="Question消息框";
QString strInfo="文件已被修改,是否保存修改?";
QMessageBox::StandardButton defaultBtn=QMessageBox::NoButton; //缺省按鈕
QMessageBox::StandardButton result;//返回選擇的按鈕
result=QMessageBox::question(this, dlgTitle, strInfo,
QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,
defaultBtn);
if (result==QMessageBox::Yes)
ui->plainTextEdit->appendPlainText("Question消息框: Yes 被選擇");
else if(result==QMessageBox::No)
ui->plainTextEdit->appendPlainText("Question消息框: No 被選擇");
else if(result==QMessageBox::Cancel)
ui->plainTextEdit->appendPlainText("Question消息框: Cancel 被選擇");
else
ui->plainTextEdit->appendPlainText("Question消息框: 無(wú)選擇");
}
void Dialog::on_btnMsgInformation_clicked()
{
QString dlgTitle="information消息框";
QString strInfo="文件已經(jīng)打開,字體大小已設(shè)置";
// QMessageBox::information(this, dlgTitle, strInfo);//使用缺省的按鈕
QMessageBox::information(this, dlgTitle, strInfo,
QMessageBox::Ok,QMessageBox::NoButton);
}
void Dialog::on_btnMsgWarning_clicked()
{
QString dlgTitle="warning 消息框";
QString strInfo="文件內(nèi)容已經(jīng)被修改";
QMessageBox::warning(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgCritical_clicked()
{
QString dlgTitle="critical消息框";
QString strInfo="有不明程序訪問(wèn)網(wǎng)絡(luò)";
QMessageBox::critical(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgAbout_clicked()
{
QString dlgTitle="about消息框";
QString strInfo="我開發(fā)的數(shù)據(jù)查看軟件 V1.0 \n 保留所有版權(quán)";
QMessageBox::about(this, dlgTitle, strInfo);
}
void Dialog::on_btnMsgAboutQt_clicked()
{
QString dlgTitle="aboutQt消息框";
QMessageBox::aboutQt(this, dlgTitle);
}
到了這里,關(guān)于06-1_Qt 5.9 C++開發(fā)指南_對(duì)話框與多窗體設(shè)計(jì)_標(biāo)準(zhǔn)對(duì)話框的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!