文章目录
- 标准文件对话框(QFileDialog)
-
- 标准颜色对话框(QColorDialog)
-
- 标准字体对话框(QFontDialog)
-
- 标准输入对话框(QInputDialog)
-
- 标准消息对话框(QMessageBox)
-
- 自定义消息框
-
介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)以及标准消息对话框(QMessageDialog)的使用
标准文件对话框(QFileDialog)
代码简介
头文件:
private slots:
void showFile();
private:
QGridLayout *mainLayOut;
QPushButton *fileBtn;
QLineEdit *fileLineEdit;
cpp文件:
void Dialog::showFile()
{
QString str = QFileDialog::getOpenFileName(this,"Open file dialog","D:\\",
tr("C++ files(*.cpp);;C files(*.c);;Head files(*.h)"));
fileLineEdit->setText(str);
}
void Dialog::createQFileDialog()
{
fileBtn = new QPushButton;
fileBtn->setText(tr("文件标准对话框实例"));
fileLineEdit = new QLineEdit;
mainLayOut->addWidget(fileBtn,0,0);
mainLayOut->addWidget(fileLineEdit,0,1);
connect(fileBtn,SIGNAL(clicked()),this,SLOT(showFile()));
}
getOpenFileName
函数介绍
QString QFileDialog::getOpenFileName
(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
QFileDialog::Options options = Options()
)
QFileDialog类常用静态函数
静态函数 | 函数说明 |
---|
getOpenFileName | 获取用户选择的文件名 |
getOpenFileNames | 获取用户选择的文件名列表 |
getSaveFileName | 获取用户保存的文件名 |
getExistingDirectory | 获取用户选择的已存在的目录名 |
标准颜色对话框(QColorDialog)
代码简介
头文件:
private slots:
void showColor();
private:
QPushButton *colorBtn;
QFrame *colorFrame;
cpp文件:
void Dialog::showColor()
{
QColor color = QColorDialog::getColor(Qt::blue);
if(color.isValid()){
colorFrame->setPalette(QPalette(color));
}
}
void Dialog::createQColorDialog()
{
colorBtn = new QPushButton;
colorBtn->setText(tr("标准颜色对话框实例"));
colorFrame = new QFrame;
colorFrame->setFrameShape(QFrame::Box);
colorFrame->setAutoFillBackground(true);
mainLayOut->addWidget(colorBtn,1,0);
mainLayOut->addWidget(colorFrame,1,1);
connect(colorBtn,SIGNAL(clicked()),this,SLOT(showColor()));
}
getColor
函数介绍
QColor QColorDialog::getColor
(
const QColor &initial = Qt::white,
QWidget *parent = nullptr,
const QString &title = QString(),
QColorDialog::ColorDialogOptions options = ColorDialogOptions()
)
QColorDialog类常用静态函数
静态函数 | 函数说明 |
---|
getColor | 获取用户选择的颜色值 |
标准字体对话框(QFontDialog)
代码简介
头文件:
private slots:
void showFont();
private:
QPushButton *fontBtn;
QLineEdit *fontLineEdit;
cpp文件:
void Dialog::showFont()
{
bool isOK = false;
QFont font = QFontDialog::getFont(&isOK);
if(isOK){
fontLineEdit->setFont(font);
}
}
void Dialog::createQFontDialog()
{
fontBtn = new QPushButton;
fontBtn->setText(tr("标准字体对话框实例"));
fontLineEdit = new QLineEdit;
fontLineEdit->setText(tr("Welcome"));
mainLayOut->addWidget(fontBtn,2,0);
mainLayOut->addWidget(fontLineEdit,2,1);
connect(fontBtn,SIGNAL(clicked()),this,SLOT(showFont()));
}
getFont
函数介绍
QFont QFontDialog::getFont
(
bool *ok,
QWidget *parent = nullptr
)
QFontDialog类常用静态函数
标准输入对话框(QInputDialog)
演示了标准输入对话框提供的四种数据类型输入,包括字符串、下拉列表、int数据类型和double数据类型。
这里自定义了一个InputDlg用于主界面按钮弹框显示,以上四种类型放在InputDlg中。点击不同的修改按钮弹出不同的类型标准输入对话框
主界面代码简介
头文件:
private slots:
void showInputDlg();
private:
QPushButton *inputBtn;
InputDlg *inputDlg;
cpp文件:
void Dialog::showInputDlg()
{
inputDlg = new InputDlg(this);
inputDlg->show();
}
void Dialog::createQInputDialog()
{
inputBtn = new QPushButton;
inputBtn->setText(tr("标准输入对话框实例"));
mainLayOut->addWidget(inputBtn,3,0);
connect(inputBtn,SIGNAL(clicked()),this,SLOT(showInputDlg()));
}
自定义InputDlg
点击不同的修改按钮弹出不同的输入对话框
头文件:
#define INPUTDLG_H
#include <QDialog>
#include <QGridLayout>
#include <QPushButton>
#include <QLabel>
class InputDlg : public QDialog
{
Q_OBJECT
public:
InputDlg(QWidget *parent = nullptr);
private slots:
void changeName();
void changeSex();
void changeAge();
void changeScore();
private:
QGridLayout *mainLayout;
QLabel *nameLabel1;
QLabel *nameLabel2;
QPushButton *nameBtn;
QLabel *sexLabel1;
QLabel *sexLabel2;
QPushButton *sexBtn;
QLabel *ageLabel1;
QLabel *ageLabel2;
QPushButton *ageBtn;
QLabel *scoreLabel1;
QLabel *scoreLabel2;
QPushButton *scoreBtn;
};
#endif
cpp文件:
#include "inputdlg.h"
#include <QInputDialog>
InputDlg::InputDlg(QWidget *parent)
:QDialog(parent)
{
setWindowTitle(tr("标准输入对话框实例"));
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("分数:"));
scoreLabel2 = new QLabel;
scoreLabel2->setText(tr("89"));
scoreLabel2->setFrameStyle(QFrame::Panel|QFrame::Sunken);
scoreBtn = new QPushButton;
scoreBtn->setText(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->setSpacing(10);
mainLayout->setMargin(15);
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 isOk = false;
QString text = QInputDialog::getText(this,tr("标准字符串输入对话框"),
tr("请输入姓名:"),QLineEdit::Normal,nameLabel2->text(),&isOk);
if(isOk && !text.isEmpty()){
nameLabel2->setText(text);
}
}
void InputDlg::changeSex()
{
QStringList sexItems;
sexItems.push_back(tr("男"));
sexItems.push_back(tr("女"));
bool isOk = false;
QString sexItem = QInputDialog::getItem(this,tr("标准条目选择对话框"),
tr("请选择性别:"),sexItems,0,false,&isOk);
if(isOk && !sexItem.isEmpty()){
sexLabel2->setText(sexItem);
}
}
void InputDlg::changeAge()
{
bool isOk = false;
int age = QInputDialog::getInt(this,tr("标准int类型输入对话框"),
tr("请输入年龄:"),ageLabel2->text().toInt(&isOk),0,100,1,&isOk);
if(isOk){
ageLabel2->setText(QString(tr("%1")).arg(age));
}
}
void InputDlg::changeScore()
{
bool isOk = false;
double score = QInputDialog::getDouble(this,tr("标准double类型输入对话框"),
tr("请输入分数:"),scoreLabel2->text().toDouble(&isOk),0,100,1,&isOk);
if(isOk){
scoreLabel2->setText(QString(tr("%1")).arg(score));
}
}
静态函数 QInputDialog::getText
、QInputDialog::getItem
、QInputDialog::getInt
、QInputDialog::getDouble
的定义可以参看QT的帮助手册
标准消息对话框(QMessageBox)
演示了常用的消息对话框包括Question消息框、Information消息框、Warning消息框、Critical消息框、About(关于)消息框、About(关于)Qt消息框以及Custom(自定义)消息框。
这里自定义了一个MsgBoxDlg类用于主界面按钮弹框显示,以上消息框放在MsgBoxDlg中。点击不同的修改按钮弹出不同的消息框。
主界面代码简介
头文件:
private slots:
void showMsgDlg();
private:
QPushButton *msgBtn;
MsgBoxDlg *msgDlg;
cpp文件:
void Dialog::showMsgDlg()
{
msgDlg = new MsgBoxDlg(this);
msgDlg->show();
}
void Dialog::createQMessageDialog()
{
msgBtn = new QPushButton;
msgBtn->setText(tr("标准消息对话框实例"));
mainLayOut->addWidget(msgBtn,3,1);
connect(msgBtn,SIGNAL(clicked()),this,SLOT(showMsgDlg()));
}
自定义MsgBoxDlg
点击不同的按钮弹出不同的消息框
头文件:
#include <QDialog>
#include <QGridLayout>
#include <QPushButton>
#include <QLabel>
class MsgBoxDlg : public QDialog
{
Q_OBJECT
public:
MsgBoxDlg(QWidget *parent = nullptr);
private slots:
void showQuestionMsg();
void showInformationMsg();
void showWarningMsg();
void showCriticalMsg();
void showAboutMsg();
void showAboutQtMsg();
private:
QGridLayout *mainLayout;
QLabel *label;
QPushButton *questionBtn;
QPushButton *informationBtn;
QPushButton *warningBtn;
QPushButton *criticalBtn;
QPushButton *aboutBtn;
QPushButton *aboutQtBtn;
};
cpp文件
MsgBoxDlg::MsgBoxDlg(QWidget *parent)
:QDialog(parent)
{
setWindowTitle(tr("标准消息对话框实例"));
label = new QLabel;
label->setText(tr("请选择一种消息框"));
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);
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"));
auto ret = QMessageBox::question(this,tr("Question消息框"),
tr("Question消息框显示演示"),
QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok);
switch(ret){
case QMessageBox::Ok:
label->setText(tr("Question Button/OK"));
break;
case QMessageBox::Cancel:
label->setText(tr("Question Button/Cancel"));
break;
default:
break;
}
return;
}
void MsgBoxDlg::showInformationMsg()
{
label->setText(tr("Information Message Box"));
QMessageBox::information(this,tr("Information消息框"),
tr("Information消息框显示演示"));
return;
}
void MsgBoxDlg::showWarningMsg()
{
label->setText(tr("Warning Message Box"));
auto ret = QMessageBox::warning(this,tr("Warning消息框"),
tr("Warning消息框显示演示"),
QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
QMessageBox::Save);
switch(ret){
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("Information消息框显示演示"));
return;
}
void MsgBoxDlg::showAboutMsg()
{
label->setText(tr("About Message Box"));
QMessageBox::about(this,tr("About消息框"),
tr("About消息框显示演示"));
return;
}
void MsgBoxDlg::showAboutQtMsg()
{
label->setText(tr("AboutQt Message Box"));
QMessageBox::aboutQt(this,tr("AboutQt消息框"));
return;
}
静态函数 QMessageBox::question、QMessageBox::information、QMessageBox::warning、QMessageBox::critical、QMessageBox::about、QMessageBox::aboutQt
的定义可以参看QT的帮助手册
自定义消息框
代码简介
头文件:
private slots:
void showCustomDlg();
private:
QPushButton *customBtn;
QLabel *label;
cpp文件:
void Dialog::showCustomDlg()
{
label->setText(tr("Custom Message Box"));
QMessageBox customMsgBox;
customMsgBox.setWindowTitle(tr("用户自定义消息框"));
QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole);
QPushButton *noBtn = customMsgBox.addButton(tr("no"),QMessageBox::ActionRole);
QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);
customMsgBox.setText(tr("这是一个用户自定义消息框"));
customMsgBox.exec();
auto ret = customMsgBox.clickedButton();
if(ret == yesBtn){
label->setText(tr("Custom Message Box/Yes"));
}
if(ret == noBtn){
label->setText(tr("Custom Message Box/No"));
}
if(ret == cancelBtn){
label->setText(tr("Custom Message Box/Cancel"));
}
return;
}
void Dialog::createCustomDialog()
{
customBtn = new QPushButton;
customBtn->setText(tr("用户自定义消息对话框实例"));
label = new QLabel;
label->setFrameStyle(QFrame::Panel|QFrame::Sunken);
mainLayOut->addWidget(customBtn,4,0);
mainLayOut->addWidget(label,4,1);
connect(customBtn,SIGNAL(clicked()),this,SLOT(showCustomDlg()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)