标准对话框
包括文件对话框,可进行文件的选择;颜色对话框,可对颜色进行选择;字体对话框,可对字体的样式进行选择;输入对话框,控制对不同的文字进行输入;消息对话框,包括信息提示框、询问提示框、警告提示框、错误提示框和帮助提示框。
一、文件对话框
创建dialog类继承于QDialog类,通过点击按钮,弹出对话框进行文件选择。
dialog.h:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void loadFile();
private:
Ui::Dialog *ui;
QPushButton *fileBtn; //文件按鈕
QLineEdit *fileUrl; //存文件路勁
QGridLayout *myLayout; //佈局
};
#endif // DIALOG_H
dialog.cpp:
#include "dialog.h"
#include "ui_dialog.h"
#include <QFileDialog>
#include <QDebug>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
fileBtn = new QPushButton("點擊選擇文件");
fileUrl = new QLineEdit;
myLayout = new QGridLayout(this);
myLayout->addWidget(fileBtn,0,0);
myLayout->addWidget(fileUrl,0,1);
connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::loadFile()
{
//打开一个文件
// QString path = QFileDialog::getOpenFileName(this,"標準對話框",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//打开多个文件
// QStringList strList = QFileDialog::getOpenFileNames(this,"選擇多個文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//选择保存一个文件
// QString path = QFileDialog::getSaveFileName(this,"保存文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
//打开已有目录
// QString path = QFileDialog::getExistingDirectory(this,"打開已有的目錄",".");
//选择一个文件,可支持远程网络文件
QUrl url = QFileDialog::getOpenFileUrl(this,"保存文件",QUrl(""),"c++(*.cpp);;c file(*.c);;header(*.h)");
// QString path;
// foreach(QString str,strList){
// path += str;
// fileUrl->setText(path);
// }
// fileUrl->setText(path);
qDebug() << url;
}
其中常用的有getOpenFileName、getOpenFileNames、getSaveFileName、getExistingDirectory、getOpenFileUrl方法。
1.1 getOpenFileName
调用这个方法,文件提示框中可以进行选择一个文件。
//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
//filter:过滤文件类型,多种类型间用;;隔开
static QString getOpenFileName(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options());
1.2 getOpenFileNames
文件提示框中可以同时选择多个文件。
//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
//filter:过滤文件类型,多种类型间用;;隔开
static QString getOpenFileNames(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options());
1.3 getSaveFileName
可选择一个目录进行文件的保存。
//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
//filter:过滤文件类型,多种类型间用;;隔开
static QString getSaveFileName(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options());
1.4 getExistingDirectory
选择一个已存在的目录。
//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:一般为"."
static QString getExistingDirectory(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
Options options = ShowDirsOnly);
1.5 getOpenFileUrl
选择一个文件,可以是远程网络文件。
//parent:在哪个组件上显示,一般为this,在当前窗体组件显示
//caption:对话框标题
//dir:为寻找的文件路径
//filter:过滤文件类型,多种类型间用;;隔开
static QUrl getOpenFileUrl(QWidget *parent = nullptr,
const QString &caption = QString(),
const QUrl &dir = QUrl(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options(),
const QStringList &supportedSchemes = QStringList());
二、颜色对话框
在dialog类中添加按钮,通过点击按钮,弹出颜色对话框进行颜色选择。
2.1 getColor
颜色对话框常用的方法为getColor,返回类型为QColor,
参数1:默认选中的颜色;参数2:显示的窗体组件,参数3:对话框标题
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void loadFile();
void loadMsg();
void loadMyMsg();
private:
Ui::Dialog *ui;
QPushButton *fileBtn; //文件按鈕
QLineEdit *fileUrl; //存文件路勁
QPushButton *colBtn; //颜色按钮
QFrame *color; //填充颜色
QGridLayout *myLayout; //佈局
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
fileBtn = new QPushButton("點擊選擇文件");
fileUrl = new QLineEdit;
myLayout = new QGridLayout(this);
myLayout->addWidget(fileBtn,0,0);
myLayout->addWidget(fileUrl,0,1);
connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);
//颜色对话框
colBtn = new QPushButton("点击选择颜色");
color = new QFrame;
color->setFrameStyle(QFrame::Box); //设置为盒子风格
color->setAutoFillBackground(true); //设置可进行颜色填充
myLayout->addWidget(colBtn,1,0);
myLayout->addWidget(color,1,1);
connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::loadFile()
{
//略。。。。
}
void Dialog::loadColor()
{
//getColor返回类型为QColor
//参数1:默认选中的颜色;参数2:显示的窗体组件,参数3:对话框标题
QColor col = QColorDialog::getColor(Qt::yellow,this,"颜色");
color->setPalette(QPalette(col));
}
三、字体对话框
在dialog类中添加按钮,通过点击按钮,弹出字体对话框进行字体样式选择。
3.1 getFont
字体对话框常用的方法为getFont,返回类型为QFont,
参数1:存是否改变字体成功;参数2:显示在哪个窗体组件
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void loadFile();
void loadColor();
void loadTextStyle();
void loadMsg();
void loadMyMsg();
private:
Ui::Dialog *ui;
QPushButton *fileBtn; //文件按鈕
QLineEdit *fileUrl; //存文件路勁
QPushButton *colBtn; //颜色按钮
QFrame *color; //填充颜色
QPushButton *textBtn; //字体按钮
QLineEdit *textEdit; //显示字体样式
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
#include <QFontDialog>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
fileBtn = new QPushButton("點擊選擇文件");
fileUrl = new QLineEdit;
myLayout = new QGridLayout(this);
myLayout->addWidget(fileBtn,0,0);
myLayout->addWidget(fileUrl,0,1);
connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);
//颜色对话框
colBtn = new QPushButton("点击选择颜色");
color = new QFrame;
color->setFrameStyle(QFrame::Box); //设置为盒子风格
color->setAutoFillBackground(true); //设置可进行颜色填充
myLayout->addWidget(colBtn,1,0);
myLayout->addWidget(color,1,1);
connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);
//字体对话框
textBtn = new QPushButton("点击选择字体样式");
textEdit = new QLineEdit("用来测试的文字");
myLayout->addWidget(textBtn,2,0);
myLayout->addWidget(textEdit,2,1);
connect(textBtn,&QPushButton::clicked,this,&Dialog::loadTextStyle);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::loadFile()
{
//略。。。。
}
void Dialog::loadColor()
{
QColor col = QColorDialog::getColor(Qt::yellow,this,"颜色");
color->setPalette(QPalette(col));
}
void Dialog::loadTextStyle()
{
bool ok;
QFont font = QFontDialog::getFont(&ok,this);
if(ok){
textEdit->setFont(font);
}
}
四、输入对话框
创建一个input类,继承QDialog类,通过点击按钮,弹出对话框进行内容的输入。
input.h
#ifndef INPUT_H
#define INPUT_H
#include <QDialog>
#include <QPushButton>
#include <QLabel>
#include <QGridLayout>
class Input : public QDialog
{
Q_OBJECT
public:
Input(QWidget *parent = nullptr);
private slots:
void changeName();
void changeSex();
void changeAge();
void changeScore();
private:
//标签名
QLabel *nameTitle;
QLabel *sexTitle;
QLabel *ageTitle;
QLabel *scoreTitle;
//显示的内容
QLabel *name;
QLabel *sex;
QLabel *age;
QLabel *score;
QPushButton *nameBtn; //姓名按钮
QPushButton *sexBtn; //性别按钮
QPushButton *ageBtn; //年龄按钮
QPushButton *scoreBtn; //分数按钮
QGridLayout *myLayout;
};
#endif // INPUT_H
input.cpp
#include "input.h"
#include <QInputDialog>
#include <QStringList>
Input::Input(QWidget *parent): QDialog(parent)
{
nameTitle = new QLabel("姓名:");
sexTitle = new QLabel("性别:");
ageTitle = new QLabel("年龄:");
scoreTitle = new QLabel("分数:");
name = new QLabel("冰冰");
sex = new QLabel("女生");
age = new QLabel("30");
score = new QLabel("98");
//设置凹陷属性
name->setFrameStyle(QFrame::Panel | QFrame::Sunken);
sex->setFrameStyle(QFrame::Panel | QFrame::Sunken);
age->setFrameStyle(QFrame::Panel | QFrame::Sunken);
score->setFrameStyle(QFrame::Panel | QFrame::Sunken);
nameBtn = new QPushButton("更改姓名"); //姓名按钮
sexBtn = new QPushButton("更改性别"); //性别按钮
ageBtn = new QPushButton("更改年龄"); //年龄按钮
scoreBtn = new QPushButton("更改分数"); //分数按钮
myLayout = new QGridLayout(this);
myLayout->addWidget(nameTitle,0,0);
myLayout->addWidget(name,0,1);
myLayout->addWidget(nameBtn,0,2);
myLayout->addWidget(sexTitle,1,0);
myLayout->addWidget(sex,1,1);
myLayout->addWidget(sexBtn,1,2);
myLayout->addWidget(ageTitle,2,0);
myLayout->addWidget(age,2,1);
myLayout->addWidget(ageBtn,2,2);
myLayout->addWidget(scoreTitle,3,0);
myLayout->addWidget(score,3,1);
myLayout->addWidget(scoreBtn,3,2);
connect(nameBtn,&QPushButton::clicked,this,&Input::changeName);
connect(sexBtn,&QPushButton::clicked,this,&Input::changeSex);
connect(ageBtn,&QPushButton::clicked,this,&Input::changeAge);
connect(scoreBtn,&QPushButton::clicked,this,&Input::changeScore);
}
void Input::changeName()
{
bool ok;
QString newName = QInputDialog::getText(this,"姓名","更改姓名",QLineEdit::Normal,name->text(),&ok);
if(ok && !newName.isEmpty()){
name->setText(newName);
}
}
void Input::changeSex()
{
bool ok;
QStringList list;
list << "男" << "女";
QString newSex = QInputDialog::getItem(this,"性别","更改性别",list,0,false,&ok);
if(ok && !newSex.isEmpty()){
sex->setText(newSex);
}
}
void Input::changeAge()
{
bool ok;
int newAge = QInputDialog::getInt(this,"年龄","更改年龄",age->text().toInt(),0,110,1,&ok);
if(ok){
age->setText(QString::number(newAge));
}
}
void Input::changeScore()
{
bool ok;
double newScore = QInputDialog::getDouble(this,"分数","更改分数",score->text().toDouble(),0,100,1,&ok);
if(ok){
score->setText(QString::number(newScore));
}
}
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"
#include "input.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void loadFile();
void loadColor();
void loadTextStyle();
void loadInput();
private:
Ui::Dialog *ui;
QPushButton *fileBtn; //文件按鈕
QLineEdit *fileUrl; //存文件路勁
QPushButton *colBtn; //颜色按钮
QFrame *color; //填充颜色
QPushButton *textBtn; //字体按钮
QLineEdit *textEdit; //显示字体样式
QPushButton *inputBtn; //显示输入对话框
QGridLayout *myLayout; //佈局
Input *input;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
#include <QFontDialog>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
fileBtn = new QPushButton("點擊選擇文件");
fileUrl = new QLineEdit;
myLayout = new QGridLayout(this);
myLayout->addWidget(fileBtn,0,0);
myLayout->addWidget(fileUrl,0,1);
connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);
//颜色对话框
colBtn = new QPushButton("点击选择颜色");
color = new QFrame;
color->setFrameStyle(QFrame::Box); //设置为盒子风格
color->setAutoFillBackground(true); //设置可进行颜色填充
myLayout->addWidget(colBtn,1,0);
myLayout->addWidget(color,1,1);
connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);
//字体对话框
textBtn = new QPushButton("点击选择字体样式");
textEdit = new QLineEdit("用来测试的文字");
myLayout->addWidget(textBtn,2,0);
myLayout->addWidget(textEdit,2,1);
connect(textBtn,&QPushButton::clicked,this,&Dialog::loadTextStyle);
//输入对话框
inputBtn = new QPushButton("点击进行输入");
myLayout->addWidget(inputBtn,3,0,1,2);
connect(inputBtn,&QPushButton::clicked,this,&Dialog::loadInput);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::loadFile()
{
//略
}
void Dialog::loadColor()
{
//略
}
void Dialog::loadInput()
{
input = new Input(this);
input->show();
}
4.1 getText
进行单行文字的输入
//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框的类型
//参数5:输入框中显示的内容
//参数6:输入内容是否成功
static QString 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);
4.2 getlnt
进行整数的输入,只能输入整数
//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框中显示的内容
//参数5:最小值
//参数6:最大值
//参数7:步长(每次增加多少)
//参数8:输入内容是否成功
static int 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());
4.3 getDouble
进行浮点数的输入,只能输入浮点数
//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框中显示的内容
//参数5:最小值
//参数6:最大值
//参数7:步长(每次增加多少)
//参数8:输入内容是否成功
static double 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());
4.4 getltem
可进行内容的下拉,下拉选择内容
//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:可下拉选择的内容
//参数5:当前显示的内容
//参数6:是否可编辑
//参数7:输入内容是否成功
static QString 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);
4.5 getMultiLineText
输入多行字符串
//参数1:输入框显示在哪个组件下
//参数2:对话框的标题
//参数3:输入框前的文字
//参数4:输入框中显示的内容
//参数5:输入内容是否成功
static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label,
const QString &text = QString(), bool *ok = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags(),
Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
五、消息对话框
创建一个message类,继承QDialog类,通过点击按钮,弹出消息对话框,提示信息。
message.h
#ifndef MESSAGE_H
#define MESSAGE_H
#include <QPushButton>
#include <QGridLayout>
#include <QDialog>
#include <QLabel>
#include <QMessageBox>
class Message : public QDialog
{
Q_OBJECT
public:
Message(QWidget *parent);
private slots:
void getInfo();
void getQue();
void getWar();
void getCriti();
void getAbout();
void getAboutQt();
private:
QPushButton *infoBtn; //信息提示框
QPushButton *queBtn; //询问对话框
QPushButton *warBtn; //警告提示框
QPushButton *critiBtn; //错误提示框
QPushButton *aboutBtn; //关于对话框
QPushButton *aboutQtBtn; //QT帮助提示框
QLabel *msgLabel;
QGridLayout *myLayout;
void chageMsg(QMessageBox::StandardButton but);
};
#endif // MESSAGE_H
message.cpp
#include "message.h"
Message::Message(QWidget *parent): QDialog(parent)
{
infoBtn = new QPushButton("提示信息");
queBtn = new QPushButton("提示问题");
warBtn = new QPushButton("提示警告");
critiBtn = new QPushButton("提示错误");
aboutBtn = new QPushButton("提示关于");
aboutQtBtn = new QPushButton("提示关于Qt");
msgLabel = new QLabel("此处显示点击消息时间");
myLayout = new QGridLayout(this);
myLayout->addWidget(msgLabel,0,0,1,2);
myLayout->addWidget(infoBtn,1,0);
myLayout->addWidget(queBtn,1,1);
myLayout->addWidget(warBtn,2,0);
myLayout->addWidget(critiBtn,2,1);
myLayout->addWidget(aboutBtn,3,0);
myLayout->addWidget(aboutQtBtn,3,1);
connect(infoBtn,&QPushButton::clicked,this,&Message::getInfo);
connect(queBtn,&QPushButton::clicked,this,&Message::getQue);
connect(warBtn,&QPushButton::clicked,this,&Message::getWar);
connect(critiBtn,&QPushButton::clicked,this,&Message::getCriti);
connect(aboutBtn,&QPushButton::clicked,this,&Message::getAbout);
connect(aboutQtBtn,&QPushButton::clicked,this,&Message::getAboutQt);
}
void Message::getInfo()
{
msgLabel->setText("点击消息提示框");
QMessageBox::StandardButton btn = QMessageBox::information(this,"消息提示","这是一条消息提示框。。。",
QMessageBox::Ok | QMessageBox::Cancel,
QMessageBox::Ok);
if(btn == QMessageBox::Ok){
msgLabel->setText("点击了ok按鈕");
}else if(btn == QMessageBox::Cancel){
msgLabel->setText("点击了cancel按鈕");
}else msgLabel->setText("沒有点击按鈕");
}
void Message::getQue()
{
msgLabel->setText("点击问题提示框");
QMessageBox::StandardButton btn = QMessageBox::question(this,"问题提示","这是一条问题提示框。。。",
QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::Save);
chageMsg(btn);
}
void Message::getWar()
{
msgLabel->setText("点击警告提示框");
QMessageBox::StandardButton btn = QMessageBox::warning(this,"问题提示","这是一条问题提示框。。。");
chageMsg(btn);
}
void Message::getCriti()
{
msgLabel->setText("点击错误提示框");
QMessageBox::StandardButton btn = QMessageBox::critical(this,"错误提示","这是一条错误提示框。。。");
chageMsg(btn);
}
void Message::getAbout()
{
msgLabel->setText("点击帮助提示框");
QMessageBox::about(this,"错误提示","这是一条帮助提示框。。。");
}
void Message::getAboutQt()
{
msgLabel->setText("点击帮助提示框");
QMessageBox::aboutQt(this,"Qt帮助提示");
}
void Message::chageMsg(QMessageBox::StandardButton but)
{
switch (but) {
case QMessageBox::Ok:
msgLabel->setText("点击了ok按鈕");
break;
case QMessageBox::Cancel:
msgLabel->setText("点击了cancel按鈕");
break;
case QMessageBox::Save:
msgLabel->setText("点击了save按鈕");
break;
default:
break;
}
}
5.1 information
弹出消息提示框
//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示信息
//参数7:显示的按钮
//参数8:默认按钮
static int information(QWidget *parent, const QString &title,
const QString& text,
const QString& button0Text,
const QString& button1Text = QString(),
const QString& button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1);
5.2 question
弹出询问提示框
//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示信息
//参数7:显示的按钮
//参数8:默认按钮
static int question(QWidget *parent, const QString &title,
const QString& text,
const QString& button0Text,
const QString& button1Text = QString(),
const QString& button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1);
5.3 waming
弹出警告提示框
//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示内容
//参数4:提示按钮(OK)
//参数5:默认按钮
static StandardButton warning(QWidget *parent, const QString &title,
const QString &text, StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
5.4 critical
弹出错误提示框
//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示内容
//参数4:提示按钮(OK)
//参数5:默认按钮
static StandardButton critical(QWidget *parent, const QString &title,
const QString &text, StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
5.5 about
弹出帮助提示框
//参数1:提示框的父组件
//参数2:对话框的标题
//参数3:提示内容
static void about(QWidget *parent, const QString &title, const QString &text);
5.6 aboutQt
弹出QT帮助提示框
//参数1:提示框的父组件
//参数2:对话框的标题
static void aboutQt(QWidget *parent, const QString &title = QString());
六、自定义消息对话框
QT支持自定义消息框。
在dialog.h中添加代码如下:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QTextLine>
#include <QLineEdit>
#include <QFrame>
#include "message.h"
#include "input.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void loadFile();
void loadColor();
void loadTextStyle();
void loadInput();
void loadMsg();
void loadMyMsg();
private:
Ui::Dialog *ui;
QPushButton *fileBtn; //文件按鈕
QLineEdit *fileUrl; //存文件路勁
QPushButton *colBtn; //颜色按钮
QFrame *color; //填充颜色
QPushButton *textBtn; //字体按钮
QLineEdit *textEdit; //显示字体样式
QPushButton *msgBtn;
Message *msg;
QPushButton *myMsg; //自定義消息框
QLabel *myMsgLabel;
QGridLayout *myLayout; //佈局
QPushButton *inputBtn;
Input *input;
};
#endif // DIALOG_H
在dialog.cpp中添加代码如下:
#include "dialog.h"
#include "ui_dialog.h"
#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QColor>
#include <QFontDialog>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
fileBtn = new QPushButton("點擊選擇文件");
fileUrl = new QLineEdit;
myLayout = new QGridLayout(this);
myLayout->addWidget(fileBtn,0,0);
myLayout->addWidget(fileUrl,0,1);
connect(fileBtn,&QPushButton::clicked,this,&Dialog::loadFile);
//颜色对话框
colBtn = new QPushButton("点击选择颜色");
color = new QFrame;
color->setFrameStyle(QFrame::Box); //设置为盒子风格
color->setAutoFillBackground(true); //设置可进行颜色填充
myLayout->addWidget(colBtn,1,0);
myLayout->addWidget(color,1,1);
connect(colBtn,&QPushButton::clicked,this,&Dialog::loadColor);
//字体对话框
textBtn = new QPushButton("点击选择字体样式");
textEdit = new QLineEdit("用来测试的文字");
myLayout->addWidget(textBtn,2,0);
myLayout->addWidget(textEdit,2,1);
connect(textBtn,&QPushButton::clicked,this,&Dialog::loadTextStyle);
//输入对话框
inputBtn = new QPushButton("点击进行输入");
myLayout->addWidget(inputBtn,3,0,1,2);
connect(inputBtn,&QPushButton::clicked,this,&Dialog::loadInput);
//消息对话框
msgBtn = new QPushButton("点击查看信息框");
myLayout->addWidget(msgBtn,4,0,1,2);
connect(msgBtn,&QPushButton::clicked,this,&Dialog::loadMsg);
myMsgLabel = new QLabel("显示自定义信息历程");
myMsg = new QPushButton("自定义消息");
myLayout->addWidget(myMsgLabel,5,0,1,2);
myLayout->addWidget(myMsg,6,0,1,2);
connect(myMsg,&QPushButton::clicked,this,&Dialog::loadMyMsg);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::loadFile()
{
// QString path = QFileDialog::getOpenFileName(this,"標準對話框",".","c++(*.cpp);;c file(*.c);;header(*.h)");
// QStringList strList = QFileDialog::getOpenFileNames(this,"選擇多個文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
// QString path = QFileDialog::getSaveFileName(this,"保存文件",".","c++(*.cpp);;c file(*.c);;header(*.h)");
// QString path = QFileDialog::getExistingDirectory(this,"打開已有的目錄",".");
QUrl url = QFileDialog::getOpenFileUrl(this,"保存文件",QUrl(""),"c++(*.cpp);;c file(*.c);;header(*.h)");
// QString path;
// foreach(QString str,strList){
// path += str;
// fileUrl->setText(path);
// }
// fileUrl->setText(path);
qDebug() << url;
}
void Dialog::loadColor()
{
QColor col = QColorDialog::getColor(Qt::yellow,this,"颜色");
color->setPalette(QPalette(col));
}
void Dialog::loadTextStyle()
{
bool ok;
QFont font = QFontDialog::getFont(&ok,this);
if(ok){
textEdit->setFont(font);
}
}
void Dialog::loadInput()
{
input = new Input(this);
input->show();
}
void Dialog::loadMsg()
{
msg = new Message(this);
msg->show();
}
void Dialog::loadMyMsg()
{
myMsgLabel->setText("点击自定义消息按钮");
QMessageBox myMsgBox;
myMsgBox.setWindowTitle("自定义的消息提示框"); //设置窗口标题
//添加自定义的按钮
QPushButton *ok = myMsgBox.addButton("彳亍",QMessageBox::ActionRole);
QPushButton *no = myMsgBox.addButton("不行",QMessageBox::ActionRole);
QPushButton *cancel = myMsgBox.addButton(QMessageBox::Cancel);
myMsgBox.setIconPixmap(QPixmap("chayao.jpg"));
myMsgBox.exec(); //启用自定义按钮
if(myMsgBox.clickedButton() == ok){
myMsgLabel->setText("点击了彳亍");
}else if(myMsgBox.clickedButton() == no){ myMsgLabel->setText("点击了不行"); }
else if(myMsgBox.clickedButton() == cancel){ myMsgLabel->setText("点击了cancel"); }
else myMsgLabel->setText("沒有点击按鈕");
}