QT学习:基本对话框
在QT的基本對(duì)話框中包括標(biāo)準(zhǔn)文件對(duì)話框、標(biāo)準(zhǔn)顏色對(duì)話框、標(biāo)準(zhǔn)字體對(duì)話框、標(biāo)準(zhǔn)輸入對(duì)話框以及標(biāo)準(zhǔn)消息對(duì)話框,各種標(biāo)準(zhǔn)基本對(duì)話框通過調(diào)用各自不同的靜態(tài)函數(shù)來完成其功能。
下圖為標(biāo)準(zhǔn)基本對(duì)話框所需的靜態(tài)函數(shù)
一、標(biāo)準(zhǔn)文件對(duì)話框
用戶可以通過如上圖這些函數(shù)可以很方便地定制自己地文件對(duì)話框。getOpenFileName()函數(shù)地詳細(xì)介紹如下:
QString QFileDialog: :getOpenFileName ( Qwidget* parent=0,//標(biāo)準(zhǔn)文件對(duì)話框的父窗口const QString & caption=QString(), //標(biāo)準(zhǔn)文件對(duì)話框的標(biāo)題名const QString & dir=QString(),//指定了默認(rèn)目錄,若此參數(shù)帶有文件名,則文件名將是默認(rèn)選中地文件const QString & filter=QString(),//對(duì)文件類型進(jìn)行過濾,只有與過濾器匹配地文件才顯示QString* selectedFilter=0,//用戶選擇的過濾器通過此參數(shù)返回Options options=0//選擇顯示文件名的格式,默認(rèn)是同時(shí)顯示目錄與文件名 )下面代碼是使用文件對(duì)話框地實(shí)例:
setWindowTitle(tr("各種標(biāo)準(zhǔn)對(duì)話框的實(shí)例"));fileBtn=new QPushButton; //各個(gè)控件對(duì)象的初始化fileBtn->setText(tr("文件標(biāo)準(zhǔn)對(duì)話框?qū)嵗?#34;));fileLineEdit=new QLineEdit; //用來顯示選擇的文件名mainLayout=new QGridLayout(this); //布局設(shè)計(jì)mainLayout->addWidget(fileBtn,0,0);mainLayout->addWidget(fileLineEdit,0,1);connect(fileBtn,SIGNAL(clicked()),this,SLOT(showFile()));其中showFile()具體實(shí)現(xiàn)如下:
void Dialog::showFile() {QString s = QFileDialog::getOpenFileName(this,"open file dialog","/","C++ files(*.cpp);;C files(*.c);;Head files(*.h)");fileLineEdit->setText(s); }二、標(biāo)準(zhǔn)顏色對(duì)話框
getColor()函數(shù)形式如下:
QColor getColor (const QColor& initial=Qt::white,//指定了默認(rèn)選中的顏色,默認(rèn)為白色QWidget* parent=0//標(biāo)準(zhǔn)顏色對(duì)話框的父窗口 )函數(shù)用法如下:
colorBtn=new QPushButton; //創(chuàng)建各個(gè)控件的對(duì)象 colorBtn->setText(tr("顏色標(biāo)準(zhǔn)對(duì)話框?qū)嵗?#34;)); colorFrame=new QFrame; colorFrame->setFrameShape(QFrame::Box); colorFrame->setAutoFillBackground(true); mainLayout->addWidget(colorBtn,1,0); //布局設(shè)計(jì) mainLayout->addWidget(colorFrame,1,1); connect(colorBtn,SIGNAL(clicked()),this,SLOT(showColor())); //事件關(guān)聯(lián)其中showColor()函數(shù)具體實(shí)現(xiàn)如下:
void Dialog::showColor() {QColor c = QColorDialog::getColor(Qt::blue);if(c.isValid()){colorFrame->setPalette(QPalette(c));} }三、標(biāo)準(zhǔn)字體選擇框
下面是getFont()的函數(shù)形式:
QFont getFont ( bool* ok,//若用戶單擊“OK"按鈕,則該參數(shù)*ok將設(shè)為true,函數(shù)返回用戶所選擇的字體:否則,將設(shè)為false,此時(shí)函數(shù)返回默認(rèn)字體 Qwidget* parent=0//標(biāo)準(zhǔn)字體對(duì)話框的父窗口 );具體用法如下:
fontBtn=new QPushButton; //創(chuàng)建控件的對(duì)象 fontBtn->setText(tr("字體標(biāo)準(zhǔn)對(duì)話框?qū)嵗?#34;)); fontLineEdit=new QLineEdit; //顯示更改的字符串 fontLineEdit->setText(tr("Welcome!")); mainLayout->addWidget(fontBtn,2,0); //布局設(shè)計(jì) mainLayout->addWidget(fontLineEdit,2,1); connect(fontBtn,SIGNAL(clicked()),this,SLOT(showFont())); //事件關(guān)聯(lián)其中showFont的具體實(shí)現(xiàn)如下:
void Dialog::showFont() {bool ok;QFont f = QFontDialog::getFont(&ok);if (ok){fontLineEdit->setFont(f);} }四、標(biāo)準(zhǔn)輸入對(duì)話框
inputBtn=new QPushButton; //創(chuàng)建控件的對(duì)象 inputBtn->setText(tr("標(biāo)準(zhǔn)輸入對(duì)話框?qū)嵗?#34;)); mainLayout->addWidget(inputBtn,3,0); //布局設(shè)計(jì) connect(inputBtn,SIGNAL(clicked()),this,SLOT(showInputDlg()));//事件關(guān)聯(lián)其中showInputDlg具體實(shí)現(xiàn)為:
void Dialog::showInputDlg() {inputDlg =new InputDlg(this);inputDlg->show(); }inputDlg.cpp代碼為:
#include "inputdlg.h" #include <QInputDialog> InputDlg::InputDlg(QWidget* parent):QDialog(parent) {setWindowTitle(tr("標(biāo)準(zhǔn)輸入對(duì)話框?qū)嵗?#34;));nameLabel1 =new QLabel;nameLabel1->setText(tr("姓名:"));nameLabel2 =new QLabel;nameLabel2->setText(tr("周何駿")); //姓名的初始值nameLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);nameBtn =new QPushButton;nameBtn->setText(tr("修改姓名"));sexLabel1 =new QLabel;sexLabel1->setText(tr("性別:"));sexLabel2 =new QLabel;sexLabel2->setText(tr("男")); //性別的初始值sexLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);sexBtn =new QPushButton;sexBtn->setText(tr("修改性別"));ageLabel1 =new QLabel;ageLabel1->setText(tr("年齡:"));ageLabel2 =new QLabel;ageLabel2->setText(tr("21")); //年齡的初始值ageLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);ageBtn =new QPushButton;ageBtn->setText(tr("修改年齡"));scoreLabel1 =new QLabel;scoreLabel1->setText(tr("成績(jī):"));scoreLabel2 =new QLabel;scoreLabel2->setText(tr("80")); //成績(jī)的初始值scoreLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);scoreBtn =new QPushButton;scoreBtn->setText(tr("修改成績(jī)"));mainLayout =new QGridLayout(this);mainLayout->addWidget(nameLabel1,0,0);mainLayout->addWidget(nameLabel2,0,1);mainLayout->addWidget(nameBtn,0,2);mainLayout->addWidget(sexLabel1,1,0);mainLayout->addWidget(sexLabel2,1,1);mainLayout->addWidget(sexBtn,1,2);mainLayout->addWidget(ageLabel1,2,0);mainLayout->addWidget(ageLabel2,2,1);mainLayout->addWidget(ageBtn,2,2);mainLayout->addWidget(scoreLabel1,3,0);mainLayout->addWidget(scoreLabel2,3,1);mainLayout->addWidget(scoreBtn,3,2);mainLayout->setMargin(15);mainLayout->setSpacing(10);connect(nameBtn,SIGNAL(clicked()),this,SLOT(ChangeName()));connect(sexBtn,SIGNAL(clicked()),this,SLOT(ChangeSex()));connect(ageBtn,SIGNAL(clicked()),this,SLOT(ChangeAge()));connect(scoreBtn,SIGNAL(clicked()),this,SLOT(ChangeScore())); } void InputDlg::ChangeName() {bool ok;QString text=QInputDialog::getText(this,tr("標(biāo)準(zhǔn)字符串輸入對(duì)話框"),tr("請(qǐng)輸入姓名:"), QLineEdit::Normal,nameLabel2->text(),&ok);if (ok && !text.isEmpty())nameLabel2->setText(text); } void InputDlg::ChangeSex() {QStringList SexItems;SexItems << tr("男") << tr("女");bool ok;QString SexItem = QInputDialog::getItem(this, tr("標(biāo)準(zhǔn)條目選擇對(duì)話框"),tr("請(qǐng)選擇性別:"), SexItems, 0, false, &ok);if (ok && !SexItem.isEmpty())sexLabel2->setText(SexItem); } void InputDlg::ChangeAge() {bool ok;int age = QInputDialog::getInt(this, tr("標(biāo)準(zhǔn)int類型輸入對(duì)話框"),tr("請(qǐng)輸入年齡:"), ageLabel2->text().toInt(&ok), 0, 100, 1, &ok);if (ok)ageLabel2->setText(QString(tr("%1")).arg(age)); } void InputDlg::ChangeScore() {bool ok;double score = QInputDialog::getDouble(this, tr("標(biāo)準(zhǔn)double類型輸入對(duì)話框"),tr("請(qǐng)輸入成績(jī):"),scoreLabel2->text().toDouble(&ok), 0, 100, 1, &ok);if (ok)scoreLabel2->setText(QString(tr("%1")).arg(score)); }五、消息對(duì)話框
這里因?yàn)樗邢⒖蛴梅ǘ碱愃?#xff0c;所以我們只詳細(xì)介紹其中一個(gè)即可。
Question消息框函數(shù)形式如下:
具體用法為:
MsgBtn =new QPushButton; //創(chuàng)建控件對(duì)象 MsgBtn->setText(tr("標(biāo)準(zhǔn)消息對(duì)話框?qū)嵗?#34;)); mainLayout->addWidget(MsgBtn,3,1); connect(MsgBtn,SIGNAL(clicked()),this,SLOT(showMsgDlg())); void Dialog::showMsgDlg() {msgDlg =new MsgBoxDlg();msgDlg->show(); }msgboxdlg的cpp文件具體實(shí)現(xiàn)如下:
#include "msgboxdlg.h" #include <QMessageBox> MsgBoxDlg::MsgBoxDlg(QWidget *parent):QDialog(parent) {setWindowTitle(tr("標(biāo)準(zhǔn)消息對(duì)話框?qū)嵗?#34;)); //設(shè)置對(duì)話框的標(biāo)題label =new QLabel;label->setText(tr("請(qǐng)選擇一種消息框"));questionBtn =new QPushButton;questionBtn->setText(tr("QuestionMsg"));informationBtn =new QPushButton;informationBtn->setText(tr("InformationMsg"));warningBtn =new QPushButton;warningBtn->setText(tr("WarningMsg"));criticalBtn =new QPushButton;criticalBtn->setText(tr("CriticalMsg"));aboutBtn =new QPushButton;aboutBtn->setText(tr("AboutMsg"));aboutQtBtn =new QPushButton;aboutQtBtn->setText(tr("AboutQtMsg"));//布局mainLayout =new QGridLayout(this);mainLayout->addWidget(label,0,0,1,2);mainLayout->addWidget(questionBtn,1,0);mainLayout->addWidget(informationBtn,1,1);mainLayout->addWidget(warningBtn,2,0);mainLayout->addWidget(criticalBtn,2,1);mainLayout->addWidget(aboutBtn,3,0);mainLayout->addWidget(aboutQtBtn,3,1);//事件關(guān)聯(lián)connect(questionBtn,SIGNAL(clicked()),this,SLOT(showQuestionMsg()));connect(informationBtn,SIGNAL(clicked()),this,SLOT(showInformationMsg()));connect(warningBtn,SIGNAL(clicked()),this,SLOT(showWarningMsg()));connect(criticalBtn,SIGNAL(clicked()),this,SLOT(showCriticalMsg()));connect(aboutBtn,SIGNAL(clicked()),this,SLOT(showAboutMsg()));connect(aboutQtBtn,SIGNAL(clicked()),this,SLOT(showAboutQtMsg())); } 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::Cancel:label->setText("Question button/Cancel");break;default:break;}return; } void MsgBoxDlg::showInformationMsg() {label->setText(tr("Information Message Box"));QMessageBox::information(this,tr("Information消息框"),tr("這是Information消息框測(cè)試,歡迎您!"));return; } void MsgBoxDlg::showWarningMsg() {label->setText(tr("Warning Message Box"));switch(QMessageBox::warning(this,tr("Warning消息框"),tr("您修改的內(nèi)容還未保存,是否要保存對(duì)文檔的修改?"),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/Cancel"));break;default:break;}return; } void MsgBoxDlg::showCriticalMsg() {label->setText(tr("Critical Message Box"));QMessageBox::critical(this,tr("Critical消息框"),tr("這是一個(gè)Critical消息框測(cè)試!"));return; } void MsgBoxDlg::showAboutMsg() {label->setText(tr("About Message Box"));QMessageBox::about(this,tr("About消息框"),tr("這是一個(gè)About消息框測(cè)試!"));return; } void MsgBoxDlg::showAboutQtMsg() {label->setText(tr("About Qt Message Box"));QMessageBox::aboutQt(this,tr("About Qt消息框"));return; }總結(jié)
以上是生活随笔為你收集整理的QT学习:基本对话框的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT学习:容器类及QVariant类
- 下一篇: QT学习:工具盒类