Qt 对话框

130 篇文章 4 订阅
24 篇文章 1 订阅

  • 扩展性(“更多”选项)
    setExtension()
    setOrientation()
    showExtension()

  • 默认按钮(回车键时被按下的按钮)
    QPushButton::setDefault()
    QPushButton::isDefault()
    QPushButton::autonDefault()

  • setSizeGripEnabled()函数
    设置是否能拖拽右下角图标(QSizeGrip对象)控制界面大小。

  • 构造函数

QDialog(
	QWidget *parent = 0, 
	const char *name = 0, 
	bool model = FALSE, 
	WFlag f = 0
);

非模态,show()显示。
模态,exec()显示,会阻塞其他窗口输入。
model为true ,show()显示,半模态参数f指定对话框风格。
比如去掉“这是什么”按钮,
设置f = WSyle_Customize|WSyle_NormalBorder|WStyle_Title|WStyle_SysMenu。

  • DialogCode
enum DialogCode{Rejected, Accepted};

表示模态对话框返回值。

  • result()函数
int result() const;

获得模态对话框的结果代码,返回值取Rejected或Accepted。
WDestructiveClose标记构造的对话框不调用这个函数。

  • show()函数
virtual void show();

显示非模态或半模态对话框。对话框无本地事件循环,需定时调用QApplication::processEvents()处理事件。

  • setOrientation()函数
void setOrientation(Orientation orientation);

设置对话框扩展方向,Horizontal,Vertical。

  • orientation()函数
void orientation() const;

返回对话框的扩展方向。

  • setExtension()函数
void setExtension(QWidget *extension);

设置extension为对话框的扩展,删除任何以前的扩展。对话框隐藏时,才能调用。

  • extension()函数
QWidget * extension() const;

获得扩展

  • setSizeGripEnabled()函数
void setSizeGripEnabled(bool);

设置调整对话框大小的控件是否生效

  • isSizeGripEnabled()函数
bool isSizeGripEnabled() const;

调整对话框大小的控件是否生效。

  • exec()函数
void exec();

执行模块对话框。

  • show()函数
void show();

执行非模块或半模态对话框。

  • setResult()函数
void setResult(int i);

设置模态对话框的结果代码为i。

  • 保护槽

(1)done()函数

virtual void done(int r);

隐藏模态对话框,并将结果代码设置为r。exec()函数返回的就是结果代码r。
若对话框设置WDestructiveClose,done()函数会销毁对话框。
(2)accept()函数

virtual void accept();

隐藏模态对话框,并将结果代码设置为Accepted。

(3)reject()函数

virtual void reject();

隐藏模态对话框,并将结果代码设置为Rejected。

(4)showExtension()函数

void showExtension(bool);

对话框无扩展或不可见,无反应。
true显示扩展部分,false隐藏。这个槽常被连接到QPushButton的QButton::toggled()信号。

  • 对话框属性

void setWindowTitle(const QString &);
void QWidget::setMinimumSize(int minw, int minh);
void QWidget::setMaxmumSize(int minw, int minh);
resize();
setWindowIcon(QIcon(“tool.ico”));
setStyleSheet(“background-image:url(gza.jpg);border:1px solid black;”);

坐标系统

  • 边框(Frame)
    上下左右宽度相同,鼠标放上边框并按住鼠标拖放可以调整窗口大小,setWindowFlags(Qt::FramelessWindowHint)去掉边框,setStyleSheet(“background:transparent;border:2px solid red;”)设置边框。
  • 标题栏(Windows Title)
    系统定义,无法更改,setWindowFlags (Qt::CustomizeWindowHint)或setWindowFlags (Qt::FramelessWindowHint)去掉标题栏。
  • 客户区(用户区,Client Area)。

从左向右为X正向,从上往下为Y正向。
(1)x()、y()获得窗口左上角在屏幕中坐标,width()、height()获得客户区的宽和高。
(2)geometry():x()、y()获得客户区左上角在屏幕中坐标,width()、height()获得客户区的宽和高。
(3)frameGeometry():x()、y()获得窗口左上角在屏幕中坐标,width()、height()获得包含客户区、标题栏和边框在内的整个窗口的宽和高。

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QDebug>

int main(int argc, char *argv[]) {
	QApplication a(argc, argv);
	QWidget w;
	
	QPushButton b(&w);
	b.setText("Button");
	b.resize(100, 40);
	b.move(20, 20);

	w.resize(800, 500);
	w.move(10, 10);
	w.show();

	return a.exec();
}

模态与非模态对话框

exec()显示模态对话框,锁住程序直到用户关闭该对话框为止。new创建和调用show()也可以创建模态对话框,在前面调用setModa()函数。

myModalDialog mydlg;
mydlg.exec();
myModalDialog *mydlg = new myModalDialog(this);
mydlg->setModal(true);
mydlg->show()

对话框可以通过调用accept()或reject()槽函数来关闭,并且exec()将返回对应的Accepted或Rejected。若窗口未被销毁,结果可以通过result()得到。若设置了WDestructiveClose标记,exec()返回时对话框会被删除。

去除标题栏和边框

Widget(parent, Qt::WDestructiveClose | Qt::WStyle_Customize | Qt::WStyle_NoBorder);

"半模态"对话框,立即将控制权返回给调用者的模态对话框,没有自己的事件循环,需要周期性地调用QApplication::processEvents()来让"半模态"对话框处理自己事件的机会。例如进度条对话框QProgressDialog,它可以让用户有机会终止一个正在运行的操作。通常模态标记为true,并调用show()。

myModalDialog mydlg;
int res = mydlg.exec();
if(res==QDialog:::Accepted)
	QMessageBox::about(this, "Note", "ok");
if(res==QDialog:::Rejected)
	QMessageBox::about(this, "Note", "cancel");

通用对话框

消息对话框

#include <QMessageBox>

询问(Question)消息框

向用户提出问题,是和否,继续、终止和重新开始,问号。

QMessageBox::StandardButton QMessageBox::question(
	QWidget *parent, 
	const QString &title, 
	const QSteing &text, 
	QMessageBox::StandardButton buttons = StandardButtons(Yes | No), 
	QMessageBox::StandardButton defaultButton = NoButton
);
label->setText(tr("Question Message Box"));
switch(QMessageBox::question(
	this,
	tr("Question消息框"),
	tr("您现在已经修改完成,是否要结束程序?"),
	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;
}

信息(Information)消息框

显示一段文本,确定,感叹号。

QMessageBox::StandardButton QMessageBox::information(
	QWidget *parent, 
	const QString &title, 
	const QSteing &text, 
	QMessageBox::StandardButton buttons, 
	QMessageBox::StandardButton defaultButton = NoButton
);
label->setText(tr("Information Message Box"));
QMessageBox::information(
	this,
	tr("Information消息框"),
	tr("这是Information消息框测试,欢迎您!")
);

警告(Warning)消息框

告诉用户发生错误。

QMessageBox::StandardButton QMessageBox::warning(
	QWidget *parent, 
	const QString &title, 
	const QSteing &text, 
	QMessageBox::StandardButton buttons = Ok, 
	QMessageBox::StandardButton defaultButton = NoButton
);
label->setText(tr("Warning Message Box"));
switch(QMessageBox::warning(
	this,
	tr("Warning消息框"),
	tr("您修改的内容还未保存,是否要保存对文档的修改?"),
	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;
}

紧急(Critical)消息框

告诉用户发生严重错误,打叉的圆形图标。

QMessageBox::StandardButton QMessageBox::critical(
	QWidget *parent, 
	const QString &title, 
	const QString &text, 
	QMessageBox::StandardButton buttons = Ok, 
	QMessageBox::StandardButton defaultButton = NoButton
);
label->setText(tr("Critical Message Box"));
QMessageBox::critical(
	this,
	tr("Critical消息框"),
	tr("这是一个Critical消息框测试!")
);

关于(About)消息框

显示本软件的版权号及版本相关的内容。

void QMessageBox::about(
	QWidget *parent, 
	const QString &title, 
	const QSteing &text
);
QMessageBox::about(
	this, 
	tr("About消息框"), 
	"visit:<a href='http://qq.com'><font color='red'>qq.com</font></a>"
);

关于(About Qt)消息框

显示Qt的版权号及版本相关的内容。

void QMessageBox::aboutQt(
	QWidget *parent, 
	const QString &title = QString()
);
label->setText(tr("About Qt Message Box"));
QMessageBox::aboutQt(
	this,
	tr("About Qt消息框")
);

自定义(Custom)消息框

QMessageBox::Ok
QMessageBox::Cancel
QMessageBox::Yes
QMessageBox::No
QMessageBox::Abort
QMessageBox::Retry
QMessageBox::Ignore

enum StandardButton {
	NoButton = 0x00000000,
	Ok = 0x00000400,
	Save = 0x00000800,
	SaveAll = 0x00001000,
	Open = 0x00002000,
	Yes = 0x00004000,
	YesToAll = 0x00008000,
	No = 0x00010000,
	NoToAll = 0x00020000,
	Abort = 0x00040000,
	Retry = 0x00080000,
	Ignore = 0x00100000,
	...
}

enum Icon {
	NoIcon = 0,
	Information = 1,
	Warning = 2,
	Critical = 3,
	Question = 4,
};
QMessageBox::StandardButton rt;
rt = QMessageBox::question(
	this, 
	"note", 
	"hello", 
	QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore
);

if(QMessageBox::Abort == rt)
	QMessageBox::information(this, "note", "you selected Abort");
else if(QMessageBox::Retry == rt)
	QMessageBox::information(this, "note", "you selected Retry");
else
	QMessageBox::information(this, "note", "you selected Ignore");
QMessageBox message(QMessageBox::NoIcon, "Title", "gza bridge");
message.setIconPixmap(QPixmap("d:\\gza.jpg"));
message.exec();
QMessageBox dlg(this);

dlg.setWindowTitle(QString::fromLocal8Bit("我的标题"));
dlg.setText(QString::fromLocal8Bit("这是一段消息。"));
//dlg.setIcon(QMessageBox::NoIcon);
dlg.setIconPixmap(QPixmap("d:\\gza.jpg"));

QPushButton *yesBtn = dlg.addButton(tr("Yes"), QMessageBox::ActionRole);
QPushButton *noBtn = dlg.addButton(tr("No"), QMessageBox::ActionRole);
QPushButton *cancelBtn = dlg.addButton(QMessageBox::Cancel);

dlg.exec();
if(dlg.clickedButton() == yesBtn) {
	label->setText("Custom Message Box/Yes");
} else if(dlg.clickedButton() == noBtn) {
	label->setText("Custom Message Box/No");
} else if(dlg.clickedButton() == cancelBtn) {
	label->setText("Custom Message Box/Cancel");
}
//本地字符集GB到Unicode的转换
//Windows默认编码GBK/GB2312/GB18030
//Qt默认编码Unicode
#define z(s) (QString::fromLocal8Bit(s))

QMessageBox dlg(this);

dlg.setWindowTitle("my title");
dlg.setText(z("你是学生吗?"));
dlg.setStandardButtons(QMessagBox::Yes|QMessageBox::No);
dlg.setDefaultButton(QMessageBox::Yes);
dlg.setIcon(QMessageBox::Question);

int ret = dlg.exec();

switch(ret) {
case QMessageBox::Yes:
	QMessageBox::information(this, NULL, z("你好,学生"));
	break;
case QMessageBox::No:
	QMessageBox::information(this, NULL, z("你好,职场人士"));
	break;
}

文件对话框

#include <QFileDialog>

QString getOpenFileName()
QStringList getOpenFileNames()
QString getSaveFileName()
QString getExistingDirectory()
QUrl getOpenFileUrl()

打开单个文件对话框

QString QFileDialog::getOpenFileName(
	QWidgt *parent = nullptr, 
	
	//标题名
	const QString &caption = QString(),
	
	//默认目录,若带有文件名,则是默认选中文件
	const QString &dir = QString(), 
	
	const QString &filter = QString(), 
	QString *selectedFilter = nullptr, 
	
	//默认同时显示目录与文件名
	Options = 0
);
QString fileName = QFileDialog::getOpenFileName(
	this, 
	"Open Image", 
	".", 
	"Image Files(*.jpg *.png)"
);

if(!fileName.empty())
	QMessageBox::information(this, "caption", fileName);

打开多个文件对话框

QStringList QFileDialog::getOpenFileNames(
	QWidgt *parent = nullptr, 
	const QString &caption = QString(), 
	const QString &dir = QString(), 
	const QString &filter = QString(), 
	QString *selectedFilter = nullptr, 
	QFileDialog::Options = ...
);
QStringList fileNames = QFileDialog::getOpenFileNames(
	this, 
	tr("选择转码文件"), 
	"d:", 
	tr("视频文件(*.mp4 *.m3u8);;所有文件(*.*);;")
);

for(int i=0; i<fileNames.size(); i++) {
	QMessageBox::information(this, "caption", fileNames[i]);
}

保存文件对话框

QStringList QFileDialog::getSaveFileName(
	QWidgt *parent = nullptr, 
	const QString &caption = QString(), 
	const QString &dir = QString(), 
	const QString &filter = QString(), 
	QString *selectedFilter = nullptr, 
	QFileDialog::Options = ...
);
QString fileName = QFileDialog::getSaveFileName(
	this, 
	"Save Image", 
	".", 
	"Image Files(*.jpg *.png)"
);
QMessageBox::information(this, "caption", fileName);

保存文件目录对话框

getExistingDirectory

实例

QString fuile_full, file_name, file_path, file_ext;
QFileInfo fi;

fuile_full = QFileDialog::getOpenFileName(
	this, 
	NULL, 
	"d:\\",
	NULL
);

if(fuile_full!="") {
	QMessageBox::information(this, "caption", fuile_full);
	fi = QFileInfo(fuile_full);
	file_name = fi.fileName();
	file_path = fi.absolutePath();
	file_ext = fi.suffix();
}
#define z(s) (QString::fromLocal8Bit(s))

//文件打开对话框
QFileDialog dlg(
	this, 
	NULL, 
	NULL, 
	z("文本文件(*.txt);;所有文件(*.*);;")
);	

//设置初始路径
dlg.setDirectory("d:\\");	

//选择多个文件
dlg.setFileMode(QFileDialog::ExistingFiles);	

//文件保存对话框
dlg.setAcceptMode(QFileDialog::AcceptSave);		

if(dlg.exec() == QFileDialog::Accepted) {
	QStringList files = dlg.selectedFiles();
	QString file = files[0];
	QMessageBox::information(this, "caption", file);
}

字体对话框

#include <QFontDialog>

QFont QFontDialog::getFont(
	bool *ok, 
	const QFont &initial, 
	QWidget *parent = nullptr, 
	const QString &title = QString(), 
	QFontDialog::FontDialogOptions options = ...
);

QFont QFontDialog::getFont(
	bool *ok, 
	QWidget *parent = nullptr
);
bool ok;
QFont font = QFontDialog::getFont(
	&ok, 
	QFont("Courier New", 10, QFont::Bold)
);
if(ok) {
	QMessageBox::information(this, "Note", "ok");
} else {
	QMessageBox::information(this, "Note", "cancel");
}
QFontDialog dlg(this);
dlg.setWindowTitle("my font dialog");
dlg.setCurrentFont(QFont("Courier New", 10, QFont::Bold));
if(dlg.exec() == QColorDialog::Accepted) {
	QFont font = dlg.selectedFont();
} 

颜色对话框

#include <QColorDialog>

QColor QColorDialog::getColor(
	const QColor &initial = Qt::white, 
	QWidget *parent = nullptr, 
	const QString &title = QString(),
	QColorDialog::ColorDialogOptions options = ...
);
QColor color = QColorDialog::getColor(
	Qt::green, 
	this, 
	"my color dialog", 
	QColorDialog::ShowAlphaChannel
);

if(color.isValid()) {
	QMessageBox::information(this, "Note", "ok");
} else {
	QMessageBox::information(this, "Note", "cancel");
}
QString str;
QColorDialog dlg(this);
dlg.setWindowTitle("my color dialog");
if(dlg.exec() == QColorDialog::Accepted) {
	QColor color = dlg.selectedColor();
	str.sprintf("rgb=(%d, %d, %d)", color.red(), color.green(), color.blue());
	QMessageBox::information(this, "Note", str);
} 

输入对话框

#include <QInputDialog>

QString getText()
int getInt()
double getDouble()
QString getItem()
QString getMultiLineText()

字符串输入对话框

static QString QInputDialog::getText(
	QWidget *parent, 
	const QString &title, 
	const QString &label,
	QLineEdit::EchoMode echo = QLineEdit::Normal,
	const QString &text = QString(), 
	bool *ok = nullptr,
	Qt::WindowFlags flags = Qt::WindowFlags(),                       Qt::InputMethodHints inputMethodHints = Qt::ImhNone
);

下拉表条目输入对话框

static QString QInputDialog::getItem(
	QWidget *parent, 
	const QString &title, 
	const QString &label,
	const QStringList &items, 
	int current = 0, 
	bool editable = true,
	bool *ok = nullptr, 
	Qt::WindowFlags flags = Qt::WindowFlags(),
	Qt::InputMethodHints inputMethodHints = Qt::ImhNone
);

int类型数据输入对话框

static int QInputDialog::getInt(
	QWidget *parent, 
	const QString &title, 
	const QString &label, 
	int value = 0,
	int minValue = -2147483647, 
	int maxValue = 2147483647,
	int step = 1, 
	bool *ok = nullptr, 
	Qt::WindowFlags flags = Qt::WindowFlags()
);

double类型数据输入对话框

static double QInputDialog::getDouble(
	QWidget *parent, 
	const QString &title, 
	const QString &label, 
	double value = 0,
	double minValue = -2147483647, 
	double maxValue = 2147483647,
	int decimals = 1, 
	bool *ok = nullptr, 
	Qt::WindowFlags flags = Qt::WindowFlags()
);

通用对话框实例1

DialogExample.pro

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = DialogExample
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += main.cpp \
    dialog.cpp \
    inputdlg.cpp \
    msgboxdlg.cpp

HEADERS  += dialog.h \
    inputdlg.h \
    msgboxdlg.h

main.cpp

#include "dialog.h"
#include <QApplication>
//#include <QTextCodec>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

	//QTextCodec::setCodecForLocale(setCodecForTr(QTextCodec::codecForLocale());

    Dialog w;
    w.show();

    return a.exec();
}

inputdlg.h

#ifndef INPUTDLG_H
#define INPUTDLG_H

#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QDialog>

class InputDlg : public QDialog {
    Q_OBJECT
public:
    explicit InputDlg(QWidget* parent=0);
private slots:
    void ChangeName();
    void ChangeSex();
    void ChangeAge();
    void ChangeScore();
private:
    QLabel *nameLabel1;
    QLabel *nameLabel2;
    QPushButton *nameBtn;

    QLabel *sexLabel1;
    QLabel *sexLabel2;
    QPushButton *sexBtn;

    QLabel *ageLabel1;
    QLabel *ageLabel2;
    QPushButton *ageBtn;

    QLabel *scoreLabel1;
    QLabel *scoreLabel2;
    QPushButton *scoreBtn;

    QGridLayout *mainLayout;
};

#endif // INPUTDLG_H

inputdlg.cpp

#include "inputdlg.h"
#include <QInputDialog>

InputDlg::InputDlg(QWidget* parent):QDialog(parent) {
    setWindowTitle(tr("标准输入对话框实例"));
    setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);

    nameLabel1 = new QLabel(tr("姓名:"));
    nameLabel2 = new QLabel(tr("周何骏"));
    nameLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    nameBtn = new QPushButton(tr("修改姓名"));

    sexLabel1 = new QLabel(tr("性别:"));
    sexLabel2 = new QLabel(tr("男"));
    sexLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    sexBtn = new QPushButton(tr("修改性别"));

    ageLabel1 = new QLabel(tr("年龄:"));
    ageLabel2 = new QLabel(tr("21"));
    ageLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    ageBtn = new QPushButton(tr("修改年龄"));

    scoreLabel1 = new QLabel(tr("成绩:"));
    scoreLabel2 = new QLabel(tr("80"));
    scoreLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    scoreBtn = new QPushButton(tr("修改成绩"));

    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("标准字符串输入对话框"),
                tr("请输入姓名:"),
                QLineEdit::Normal,
                nameLabel2->text(),
                &ok
                );
    if (ok && !text.isEmpty())
        nameLabel2->setText(text);
}

void InputDlg::ChangeSex() {
    QStringList SexItems = {tr("男"), tr("女")};
    bool ok;
    QString SexItem = QInputDialog::getItem(
                this,
                tr("标准条目选择对话框"),
                tr("请选择性别:"),
                SexItems,
                0,
                false,
                &ok
                );
    if (ok && !SexItem.isEmpty())
        sexLabel2->setText(SexItem);
}

void InputDlg::ChangeAge() {
    bool ok;
    int age = QInputDialog::getInt(
                this,
                tr("标准int类型输入对话框"),
                tr("请输入年龄:"),
                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("标准double类型输入对话框"),
                tr("请输入成绩:"),
                scoreLabel2->text().toDouble(&ok),
                0,
                100,
                1,
                &ok
                );
    if (ok)
        scoreLabel2->setText(QString(tr("%1")).arg(score));
}

msgboxdlg.h

#ifndef MSGBOXDLG_H
#define MSGBOXDLG_H

#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QDialog>

class MsgBoxDlg : public QDialog {
    Q_OBJECT
public:
    explicit MsgBoxDlg(QWidget* parent=0);
private slots:
    void showQuestionMsg();
    void showInformationMsg();
    void showWarningMsg();
    void showCriticalMsg();
    void showAboutMsg();
    void showAboutQtMsg();
private:
    QLabel *label;
    QPushButton *questionBtn;
    QPushButton *informationBtn;
    QPushButton *warningBtn;
    QPushButton *criticalBtn;
    QPushButton *aboutBtn;
    QPushButton *aboutQtBtn;
    QGridLayout *mainLayout;
};

#endif

msgboxdlg.cpp

#include "msgboxdlg.h"
#include <QMessageBox>

MsgBoxDlg::MsgBoxDlg(QWidget *parent):QDialog(parent) {
    setWindowTitle(tr("标准消息对话框实例"));
    setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);

    label = new QLabel(tr("请选择一种消息框"));
    questionBtn = new QPushButton(tr("QuestionMsg"));
    informationBtn = new QPushButton(tr("InformationMsg"));
    warningBtn = new QPushButton(tr("WarningMsg"));
    criticalBtn = new QPushButton(tr("CriticalMsg"));
    aboutBtn = new QPushButton(tr("AboutMsg"));
    aboutQtBtn = new QPushButton(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);

    //事件关联
    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("您现在已经修改完成,是否要结束程序?"),
               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;
    }
}

void MsgBoxDlg::showInformationMsg() {
    label->setText(tr("Information Message Box"));
    QMessageBox::information(
                this,
                tr("Information消息框"),
                tr("这是Information消息框测试,欢迎您!")
	);
}

void MsgBoxDlg::showWarningMsg() {
    label->setText(tr("Warning Message Box"));
    switch(QMessageBox::warning(
               this,
               tr("Warning消息框"),
               tr("您修改的内容还未保存,是否要保存对文档的修改?"),
               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;
    }
}

void MsgBoxDlg::showCriticalMsg() {
    label->setText(tr("Critical Message Box"));
    QMessageBox::critical(
                this,
                tr("Critical消息框"),
                tr("这是一个Critical消息框测试!")
	);
}

void MsgBoxDlg::showAboutMsg() {
    label->setText(tr("About Message Box"));
    QMessageBox::about(
                this,
                tr("About消息框"),
                tr("这是一个About消息框测试!")
	);
}

void MsgBoxDlg::showAboutQtMsg() {
    label->setText(tr("About Qt Message Box"));
    QMessageBox::aboutQt(
                this,
                tr("About Qt消息框")
	);
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLineEdit>
#include <QGridLayout>
#include "inputdlg.h"
#include "msgboxdlg.h"

class Dialog : public QDialog {
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
private:
    QPushButton *fileBtn;
    QLineEdit *fileLineEdit;
    QPushButton *colorBtn;
    QFrame *colorFrame;
    QPushButton *fontBtn;
    QLineEdit *fontLineEdit;
    QPushButton *inputBtn;
    QPushButton  *MsgBtn;
    QPushButton *CustomBtn;
    QLabel *label;
    QGridLayout *mainLayout;

    InputDlg *inputDlg;
    MsgBoxDlg *msgDlg;
private slots:
    void showFile();
    void showColor();
    void showFont();
    void showInputDlg();
    void showMsgDlg();
    void showCustomDlg();
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include <QGridLayout>
#include <QFileDialog>
#include <QPushButton>
#include <QColorDialog>
#include <QFontDialog>
#include <QMessageBox>

Dialog::Dialog(QWidget *parent) : QDialog(parent) {
    fileBtn = new QPushButton;
    fileBtn->setText(tr("文件标准对话框实例"));
    connect(fileBtn, SIGNAL(clicked()), this, SLOT(showFile()));
    fileLineEdit = new QLineEdit;                                 //用来显示选择的文件名
    fileLineEdit->setReadOnly(true);

    colorBtn = new QPushButton;
    colorBtn->setText(tr("颜色标准对话框实例"));
    connect(colorBtn, SIGNAL(clicked()), this, SLOT(showColor()));
    colorFrame = new QFrame;
    colorFrame->setFrameShape(QFrame::Box);
    colorFrame->setAutoFillBackground(true);
    colorFrame->setPalette(QPalette(Qt::blue));

    fontBtn = new QPushButton;
    fontBtn->setText(tr("字体标准对话框实例"));
    connect(fontBtn, SIGNAL(clicked()), this, SLOT(showFont()));
    fontLineEdit = new QLineEdit;                                 //显示更改的字符串
    fontLineEdit->setText(tr("Welcome!"));
    fontLineEdit->setReadOnly(true);

    inputBtn = new QPushButton;
    inputBtn->setText(tr("标准输入对话框实例"));
    connect(inputBtn, SIGNAL(clicked()), this, SLOT(showInputDlg()));

    MsgBtn = new QPushButton;                                    //创建控件对象
    MsgBtn->setText(tr("标准消息对话框实例"));
    connect(MsgBtn, SIGNAL(clicked()), this, SLOT(showMsgDlg()));

    CustomBtn = new QPushButton;
    CustomBtn->setText(tr("用户自定义消息对话框实例"));
    connect(CustomBtn, SIGNAL(clicked()), this, SLOT(showCustomDlg()));
    label = new QLabel;
    label->setFrameStyle(QFrame::Panel|QFrame::Sunken);

    mainLayout = new QGridLayout(this);
    mainLayout->addWidget(fileBtn, 0, 0);
    mainLayout->addWidget(fileLineEdit, 0, 1);
    mainLayout->addWidget(colorBtn, 1, 0);
    mainLayout->addWidget(colorFrame, 1, 1);
    mainLayout->addWidget(fontBtn, 2, 0);
    mainLayout->addWidget(fontLineEdit, 2, 1);
    mainLayout->addWidget(inputBtn, 3, 0);
    mainLayout->addWidget(MsgBtn, 3, 1);
    mainLayout->addWidget(CustomBtn, 4, 0);
    mainLayout->addWidget(label, 4, 1);

    inputDlg = nullptr;
    msgDlg = nullptr;

    setWindowTitle(tr("各种标准对话框的实例"));
    setWindowFlags(Qt::WindowCloseButtonHint);
}

void Dialog::showFile() {
    QString s = QFileDialog::getOpenFileName(this, "open file dialog", "/", "C++ files(*.cpp);;C files(*.c);;Head files(*.h)");
    if(!s.isEmpty())
        fileLineEdit->setText(s);
}

void Dialog::showColor() {
    QColor c = QColorDialog::getColor(colorFrame->palette().color(QPalette::Window));
    if(c.isValid()) {
        colorFrame->setPalette(QPalette(c));
    }
}

void Dialog::showFont() {
    bool ok;
    QFont f = QFontDialog::getFont(&ok);
    if(ok) {
        fontLineEdit->setFont(f);
    }
}

void Dialog::showInputDlg() {
    if(inputDlg == nullptr)
        inputDlg = new InputDlg(this);
    inputDlg->show();
}

void Dialog::showMsgDlg() {
    if(msgDlg == nullptr)
        msgDlg = new MsgBoxDlg();
    msgDlg->show();
}

void Dialog::showCustomDlg() {
    label->setText(tr("Custom Message Box"));

    QMessageBox customMsgBox;

    QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"), QMessageBox::ActionRole);
    QPushButton *noBtn = customMsgBox.addButton(tr("No"), QMessageBox::ActionRole);
    QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);

    customMsgBox.setWindowIcon(QIcon("Qt.png"));
    customMsgBox.setWindowTitle(tr("用户自定义消息框"));	//设置消息框的标题
    customMsgBox.setText(tr("这是一个用户自定义消息框!"));
    customMsgBox.setIconPixmap(QPixmap("Qt.png"));
    customMsgBox.exec();                                //显示此自定义消息框

    if(customMsgBox.clickedButton() == yesBtn)
        label->setText("Custom Message Box/Yes");
    else if(customMsgBox.clickedButton() == noBtn)
        label->setText("Custom Message Box/No");
    else if(customMsgBox.clickedButton() == cancelBtn)
        label->setText("Custom Message Box/Cancel");
}

通用对话框实例2

StandardDialogs.pro

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = StandardDialogs
TEMPLATE = app

SOURCES += main.cpp \
    dialog.cpp

HEADERS  += dialog.h

main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    Dialog w;
    w.show();

    return a.exec();
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QGroupBox>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QPlainTextEdit>

class Dialog : public QDialog {
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
private slots:
    void on_btnOpen_clicked();
    void on_btnOpenMulti_clicked();
    void on_btnSelDir_clicked();
    void on_btnSave_clicked();
    void on_btnColor_clicked();
    void on_btnFont_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();

    void on_btnInputString_clicked();
    void on_btnInputInt_clicked();
    void on_btnInputFloat_clicked();
    void on_btnInputItem_clicked();

    void on_btnClearText_clicked();
private:
    QPushButton *btnOpen;
    QPushButton *btnOpenMulti;
    QPushButton *btnSelDir;
    QPushButton *btnSave;
    QPushButton *btnColor;
    QPushButton *btnFont;
    QGroupBox *groupBox_1;	//标准对话框
    QGridLayout *gridLayout_1;

    QPushButton *btnMsgQuestion;
    QPushButton *btnMsgInformation;
    QPushButton *btnMsgWarning;
    QPushButton *btnMsgCritical;
    QPushButton *btnMsgAbout;
    QPushButton *btnMsgAboutQt;
    QGroupBox *groupBox_2;	//标准消息框QMessageBox
    QGridLayout *gridLayout_2;

    QPushButton *btnInputString;
    QPushButton *btnInputInt;
    QPushButton *btnInputFloat;
    QPushButton *btnInputItem;
    QGroupBox *groupBox_3;	//标准输入对话框QInputDialog
    QGridLayout *gridLayout_3;

    QPushButton *btnClearText;
    QGroupBox *groupBox_4;
    QGridLayout *gridLayout_4;

    QGridLayout *gridLayout;
    QPlainTextEdit *plainTextEdit;
    QVBoxLayout *mainLayout;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

#include <QDir>
#include <QFileDialog>
#include <QColorDialog>
#include <QPalette>
#include <QFont>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QProgressDialog>
#include <QCoreApplication>

Dialog::Dialog(QWidget *parent) : QDialog(parent) {
    setWindowFlag(Qt::WindowContextHelpButtonHint, false);

    btnOpen = new QPushButton(tr("打开一个文件"));
    btnOpenMulti = new QPushButton(tr("打开多个文件"));
    btnSelDir = new QPushButton(tr("选择已有目录"));
    btnSave = new QPushButton(tr("保存文件"));
    btnColor = new QPushButton(tr("选择颜色"));
    btnFont = new QPushButton(tr("选择字体"));
    groupBox_1 = new QGroupBox(tr("标准对话框"));
    gridLayout_1 = new QGridLayout(groupBox_1);
    gridLayout_1->addWidget(btnOpen, 0, 0);
    gridLayout_1->addWidget(btnOpenMulti, 0, 1);
    gridLayout_1->addWidget(btnSelDir, 1, 0);
    gridLayout_1->addWidget(btnSave, 1, 1);
    gridLayout_1->addWidget(btnColor, 2, 0);
    gridLayout_1->addWidget(btnFont, 2, 1);

    btnMsgQuestion = new QPushButton(tr("question"));
    btnMsgInformation = new QPushButton(tr("information"));
    btnMsgWarning = new QPushButton(tr("warning"));
    btnMsgCritical = new QPushButton(tr("critical"));
    btnMsgAbout = new QPushButton(tr("about"));
    btnMsgAboutQt = new QPushButton(tr("aboutQt"));
    groupBox_2 = new QGroupBox(tr("标准消息框QMessageBox"));
    gridLayout_2 = new QGridLayout(groupBox_2);
    gridLayout_2->addWidget(btnMsgQuestion, 0, 0);
    gridLayout_2->addWidget(btnMsgInformation, 0, 1);
    gridLayout_2->addWidget(btnMsgWarning, 0, 2);
    gridLayout_2->addWidget(btnMsgCritical, 1, 0);
    gridLayout_2->addWidget(btnMsgAbout, 1, 1);
    gridLayout_2->addWidget(btnMsgAboutQt, 1, 2);

    btnInputString = new QPushButton(tr("输入字符串"));
    btnInputInt = new QPushButton(tr("输入整数"));
    btnInputFloat = new QPushButton(tr("输入浮点数"));
    btnInputItem = new QPushButton(tr("条目选择输入"));
    groupBox_3 = new QGroupBox(tr("标准输入对话框QInputDialog"));
    gridLayout_3 = new QGridLayout(groupBox_3);
    gridLayout_3->addWidget(btnInputString, 0, 0);
    gridLayout_3->addWidget(btnInputInt, 0, 1);
    gridLayout_3->addWidget(btnInputFloat, 1, 0);
    gridLayout_3->addWidget(btnInputItem, 1, 1);

    btnClearText = new QPushButton(tr("清除文本框内容"));
    groupBox_4 = new QGroupBox;
    gridLayout_4 = new QGridLayout(groupBox_4);
    gridLayout_4->addWidget(btnClearText);

    gridLayout = new QGridLayout;
    gridLayout->addWidget(groupBox_1, 0, 0);
    gridLayout->addWidget(groupBox_2, 0, 1);
    gridLayout->addWidget(groupBox_3, 1, 0);
    gridLayout->addWidget(groupBox_4, 1, 1);

    plainTextEdit = new QPlainTextEdit;

    mainLayout = new QVBoxLayout(this);
    mainLayout->addLayout(gridLayout);
    mainLayout->addWidget(plainTextEdit);

    connect(btnOpen, SIGNAL(clicked()), this, SLOT(on_btnOpen_clicked()));
    connect(btnOpenMulti, SIGNAL(clicked()), this, SLOT(on_btnOpenMulti_clicked()));
    connect(btnSelDir, SIGNAL(clicked()), this, SLOT(on_btnSelDir_clicked()));
    connect(btnSave, SIGNAL(clicked()), this, SLOT(on_btnSave_clicked()));
    connect(btnColor, SIGNAL(clicked()), this, SLOT(on_btnColor_clicked()));
    connect(btnFont, SIGNAL(clicked()), this, SLOT(on_btnFont_clicked()));

    connect(btnMsgQuestion, SIGNAL(clicked()), this, SLOT(on_btnMsgQuestion_clicked()));
    connect(btnMsgInformation, SIGNAL(clicked()), this, SLOT(on_btnMsgInformation_clicked()));
    connect(btnMsgWarning, SIGNAL(clicked()), this, SLOT(on_btnMsgWarning_clicked()));
    connect(btnMsgCritical, SIGNAL(clicked()), this, SLOT(on_btnMsgCritical_clicked()));
    connect(btnMsgAbout, SIGNAL(clicked()), this, SLOT(on_btnMsgAbout_clicked()));
    connect(btnMsgAboutQt, SIGNAL(clicked()), this, SLOT(on_btnMsgAboutQt_clicked()));

    connect(btnInputString, SIGNAL(clicked()), this, SLOT(on_btnInputString_clicked()));
    connect(btnInputInt, SIGNAL(clicked()), this, SLOT(on_btnInputInt_clicked()));
    connect(btnInputFloat, SIGNAL(clicked()), this, SLOT(on_btnInputFloat_clicked()));
    connect(btnInputItem, SIGNAL(clicked()), this, SLOT(on_btnInputItem_clicked()));

    connect(btnClearText, SIGNAL(clicked()), this, SLOT(on_btnClearText_clicked()));
}

void Dialog::on_btnOpen_clicked() { //选择单个文件
    QString dlgTitle = tr("选择一个文件"); //对话框标题
    QString curPath = QDir::currentPath();//获取系统当前目录
    QString filter = tr("文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"); //文件过滤器
    QString aFileName = QFileDialog::getOpenFileName(this, dlgTitle, curPath, filter);
    if(!aFileName.isEmpty())
        plainTextEdit->appendPlainText(aFileName);
}

void Dialog::on_btnOpenMulti_clicked() { //选择多个文件
    QString dlgTitle = tr("选择多个文件"); //对话框标题
    QString curPath = QDir::currentPath();//获取系统当前目录
    QString filter = tr("文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"); //文件过滤器
    QStringList fileList = QFileDialog::getOpenFileNames(this, dlgTitle, curPath, filter);
    for (int i=0; i<fileList.count(); i++)
        plainTextEdit->appendPlainText(fileList.at(i));
}

void Dialog::on_btnSelDir_clicked() { //选择文件夹
    QString dlgTitle = tr("选择一个目录"); //对话框标题
    QString curPath = QCoreApplication::applicationDirPath(); //获取应用程序的路径
    QString selectedDir = QFileDialog::getExistingDirectory(this, dlgTitle, curPath, QFileDialog::ShowDirsOnly);
    if(!selectedDir.isEmpty())
        plainTextEdit->appendPlainText(selectedDir);
}

void Dialog::on_btnSave_clicked() {//保存文件
    QString dlgTitle = tr("保存文件"); //对话框标题
    QString curPath = QCoreApplication::applicationDirPath(); //获取应用程序的路径
    QString filter = tr("文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"); //文件过滤器
    QString aFileName = QFileDialog::getSaveFileName(this, dlgTitle, curPath, filter);
    if(!aFileName.isEmpty())
        plainTextEdit->appendPlainText(aFileName);
}

void Dialog::on_btnColor_clicked() {
    QPalette pal = plainTextEdit->palette(); //获取现有 palette
    QColor iniColor = pal.color(QPalette::Text); //现有的文字颜色
    QColor color = QColorDialog::getColor(iniColor, this, tr("选择颜色"));
    if(color.isValid()) {
        pal.setColor(QPalette::Text, color); //palette 设置选择的颜色
        plainTextEdit->setPalette(pal); //设置 palette
    }
}

void Dialog::on_btnFont_clicked() {//选择字体
    QFont iniFont = plainTextEdit->font(); //获取文本框的字体
    bool ok = false;
    QFont font = QFontDialog::getFont(&ok, iniFont); //选择字体
    if(ok) //选择有效
        plainTextEdit->setFont(font);
}

void Dialog::on_btnMsgQuestion_clicked() {
    QString dlgTitle = tr("Question消息框");
    QString strInfo = tr("文件已被修改,是否保存修改?");

    QMessageBox::StandardButton defaultBtn = QMessageBox::NoButton; //缺省按钮

    //返回选择的按钮
    QMessageBox::StandardButton result = QMessageBox::question(this, dlgTitle, strInfo,
                                                               QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel, defaultBtn);

    if (result==QMessageBox::Yes)
        plainTextEdit->appendPlainText(tr("Question消息框: Yes 被选择"));
    else if(result==QMessageBox::No)
        plainTextEdit->appendPlainText(tr("Question消息框: No 被选择"));
    else if(result==QMessageBox::Cancel)
        plainTextEdit->appendPlainText(tr("Question消息框: Cancel 被选择"));
    else
        plainTextEdit->appendPlainText(tr("Question消息框: 无选择"));
}

void Dialog::on_btnMsgInformation_clicked() {
    QString dlgTitle = tr("information消息框");
    QString strInfo = tr("文件已经打开,字体大小已设置");
    QMessageBox::information(this, dlgTitle, strInfo,
                             QMessageBox::Ok, QMessageBox::NoButton);
}

void Dialog::on_btnMsgWarning_clicked() {
    QString dlgTitle = tr("warning 消息框");
    QString strInfo = tr("文件内容已经被修改");
    QMessageBox::warning(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgCritical_clicked() {
    QString dlgTitle = tr("critical消息框");
    QString strInfo = tr("有不明程序访问网络");
    QMessageBox::critical(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgAbout_clicked() {
    QString dlgTitle = tr("about消息框");
    QString strInfo = tr("我开发的数据查看软件 V1.0 \n 保留所有版权");
    QMessageBox::about(this, dlgTitle, strInfo);
}

void Dialog::on_btnMsgAboutQt_clicked(){
    QString dlgTitle = tr("aboutQt消息框");
    QMessageBox::aboutQt(this, dlgTitle);

}

void Dialog::on_btnInputString_clicked() { //输入字符串
    QString dlgTitle = tr("输入文字对话框");
    QString txtLabel = tr("请输入文件名");
    QLineEdit::EchoMode echoMode = QLineEdit::Normal;//正常文字输入, QLineEdit::Password密码输入
    QString defaultInput = tr("新建文件.txt");

    bool ok = false;
    QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode, defaultInput, &ok);
    if(ok && !text.isEmpty())
        plainTextEdit->appendPlainText(text);
}

void Dialog::on_btnInputInt_clicked() {//输入整数
    QString dlgTitle = tr("输入整数对话框");
    QString txtLabel = tr("设置字体大小");
    QFont font = plainTextEdit->font();
    int defaultValue = font.pointSize(); //现有字体大小
    int minValue=6, maxValue=50, stepValue=1; //范围,步长
    bool ok = false;
    int inputValue = QInputDialog::getInt(this, dlgTitle, txtLabel,
                                          defaultValue, minValue, maxValue, stepValue, &ok);
    if(ok) {
        font.setPointSize(inputValue);
        plainTextEdit->setFont(font);
    }
}

void Dialog::on_btnInputFloat_clicked() { //输入浮点数
    QString dlgTitle = tr("输入浮点数对话框");
    QString txtLabel = tr("输入一个浮点数");
    float defaultValue = 3.13;

    float minValue=0, maxValue=10000;  //范围
    int decimals=2;//小数点位数

    bool ok = false;
    float inputValue = QInputDialog::getDouble(this, dlgTitle, txtLabel,
                                               defaultValue, minValue, maxValue, decimals, &ok);
    if(ok) {
        QString str = QString::asprintf("输入了一个浮点数:%.2f", inputValue);
        plainTextEdit->appendPlainText(str);
    }
}

void Dialog::on_btnInputItem_clicked() { //条目选择输入
    QStringList items; //ComboBox 列表的内容
    items <<"优秀"<<"良好"<<"合格"<<"不合格";

    QString dlgTitle = tr("条目选择对话框");
    QString txtLabel = tr("请选择级别");
    int     curIndex=0; //初始选择项
    bool    editable=true; //ComboBox是否可编辑
    bool    ok=false;
    QString text = QInputDialog::getItem(this, dlgTitle, txtLabel, items, curIndex, editable, &ok);

    if(ok && !text.isEmpty())
        plainTextEdit->appendPlainText(text);
}

void Dialog::on_btnClearText_clicked() {
    plainTextEdit->clear();
}

可扩展对话框

ExtensionDlg.pro

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = ExtensionDlg
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += main.cpp \
    extensiondlg.cpp

HEADERS  += extensiondlg.h

main.cpp

#include "extensiondlg.h"
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    ExtensionDlg w;
    w.show();

    return a.exec();
}

extensiondlg.h

#ifndef EXTENSIONDLG_H
#define EXTENSIONDLG_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QDialogButtonBox>
#include <QHBoxLayout>
#include <QVBoxLayout>

class ExtensionDlg : public QDialog {
    Q_OBJECT
public:
    explicit ExtensionDlg(QWidget *parent = 0);
private slots:
    void showDetailInfo();
private:
    //基本对话窗体部分
    QLabel *nameLabel;
    QLineEdit *nameLineEdit;
    QLabel *sexLabel;
    QComboBox *sexComboBox;
    QGridLayout *LeftLayout;

    QPushButton *OKBtn;
    QPushButton *DetailBtn;
    QDialogButtonBox *btnBox;

    QWidget *baseWidget;
    QHBoxLayout *baseLayout;

    //扩展窗体部分
    QLabel *ageLabel;
    QLineEdit *ageLineEdit;
    QLabel *departmentLabel;
    QComboBox *departmentComBox;
    QLabel *emailLabel;
    QLineEdit *emailLineEdit;

    QWidget *detailWidget;
    QGridLayout *detailLayout;

    QVBoxLayout *mainLayout;
};

#endif // EXTENSIONDLG_H

extensiondlg.cpp

#include "extensiondlg.h"

ExtensionDlg::ExtensionDlg(QWidget *parent) : QDialog(parent) {
    setWindowFlags(Qt::WindowCloseButtonHint);
    setWindowTitle(tr("Extension Dialog"));

    //实现基本对话窗体部分
    nameLabel = new QLabel(tr("姓名:"));
    nameLineEdit = new QLineEdit;
    sexLabel = new QLabel(tr("性别:"));
    sexComboBox = new  QComboBox;
    sexComboBox->insertItem(0,tr("女"));
    sexComboBox->insertItem(1,tr("男"));
    LeftLayout = new QGridLayout;
    LeftLayout->addWidget(nameLabel, 0, 0);
    LeftLayout->addWidget(nameLineEdit, 0, 1);
    LeftLayout->addWidget(sexLabel, 1, 0);
    LeftLayout->addWidget(sexComboBox, 1, 1);

    OKBtn = new QPushButton(tr("确定"));
    DetailBtn = new QPushButton(tr("详细"));
    connect(DetailBtn, SIGNAL(clicked()), this, SLOT(showDetailInfo()));
    btnBox = new QDialogButtonBox(Qt::Vertical);
    btnBox->addButton(OKBtn, QDialogButtonBox::ActionRole);
    btnBox->addButton(DetailBtn, QDialogButtonBox::ActionRole);

    baseWidget = new QWidget;
    baseLayout = new QHBoxLayout(baseWidget);
    baseLayout->addLayout(LeftLayout);
    baseLayout->addWidget(btnBox);

    //实现扩展窗体部分
    ageLabel = new QLabel(tr("年龄:"));
    ageLineEdit = new QLineEdit(tr("30"));
    departmentLabel = new QLabel(tr("部门:"));
    departmentComBox = new QComboBox;
    departmentComBox->addItem(tr("部门1"));
    departmentComBox->addItem(tr("部门2"));
    departmentComBox->addItem(tr("部门3"));
    departmentComBox->addItem(tr("部门4"));
    emailLabel = new QLabel(tr("email:"));
    emailLineEdit = new QLineEdit;

    detailWidget = new QWidget;
    detailWidget->hide();
    detailLayout = new QGridLayout(detailWidget);
    detailLayout->addWidget(ageLabel, 0, 0);
    detailLayout->addWidget(ageLineEdit, 0, 1);
    detailLayout->addWidget(departmentLabel, 1, 0);
    detailLayout->addWidget(departmentComBox, 1, 1);
    detailLayout->addWidget(emailLabel, 2, 0);
    detailLayout->addWidget(emailLineEdit, 2, 1);

    //
    mainLayout = new QVBoxLayout(this);
    mainLayout->addWidget(baseWidget);
    mainLayout->addWidget(detailWidget);
    mainLayout->setSizeConstraint(QLayout::SetFixedSize);
    mainLayout->setSpacing(10);
}

void ExtensionDlg::showDetailInfo() {
    if(detailWidget->isHidden())
        detailWidget->show();
    else
        detailWidget->hide();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值