点击上方蓝字关注我们
对话框在应用程序很常见,对话框没有最大化按钮、没有最小化按钮、基本上不能改变移动形状大小。QT提供了一些内置的标准对话框,标准对话框的基类为QDialog。继承关系如下图:
图4-1 对话框继承关系视图
4.1 标准消息对话框 在实际应用程序中,经常会有各种各样提示框给用户提供一些信息。比如:警告、错误信息等等。QT使用QMessageBox类封装了标准的信息提示框。包含:about(简单文本提示框)、aboutQt(关于QT信息提示框)、critical(致命信息提示框)、information(基本信息提示框)、question(问题提示框)、warning(警告信息提示框)。
4.1.1 QMessageBox静态函数 以上提及的各种类型的消息对话框QT提供了静态函数接口,方便调用,以下介绍静态函数的使用方法。
使用消息对话框需要添加QMessageBox头文件。
1. 简单纯文本提示框
void QMessageBox::about(QWidget *parent, const QString &title, const QString &text)
|
参数信息:
QWidget *parent:父窗口指针。
const QString &title:对话框标题。
const QString &text:提示的文本信息。
QMessageBox::about(this,"提示信息",tr("纯文本对话框演示!"));
|
图4-1-1 纯文本对话框运行效果
2. QT信息提示框
void aboutQt(QWidget *parent, const QString &title = QString())
|
使用示例:
QMessageBox::aboutQt(this);
|
图4-1-2 QT信息提示框运行效果
3. 致命信息提示框
static StandardButton critical(QWidget *parent, const QString &title,const QString &text, StandardButtons buttons = Ok,StandardButton defaultButton = NoButton);
|
参数信息:
QWidget *parent:父窗口指针。
const QString &title:对话框标题。
const QString &text:提示的文本信息。
StandardButtons buttons = Ok :可选择的标准按钮。
StandardButton defaultButton = NoButton : 默认选择的按钮。
返回值:选中的按钮。
StandardButtons是标准按钮的枚举类型,枚举类型的值如下表:
QMessageBox::Ok
| 确定
| QMessageBox::Open
| 打开
| QMessageBox::Save
| 保存
| QMessageBox::Cancel
| 取消
| QMessageBox::Close
| 关闭
| QMessageBox::Discard
| 丢弃
| QMessageBox::Yes
| Yes
| QMessageBox::No
| No
|
int value;
value=QMessageBox::critical(this,"错误提示","当前产生了一个致命错误!",
QMessageBox::Ok | QMessageBox::Discard| QMessageBox::Cancel,QMessageBox::Ok);
switch(value)
{
case QMessageBox::Ok:
/*处理代码*/
break;
case QMessageBox::Cancel:
/*处理代码*/
break;
case QMessageBox::Discard:
/*处理代码*/
break;
}
|
图4-1-3 致命错误提示框运行效果
4. 基本信息提示框
StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
|
参数信息:
QWidget *parent:父窗口指针。
const QString &title:对话框标题。
const QString &text:提示的文本信息。
StandardButtons buttons = Ok :可选择的标准按钮。
StandardButton defaultButton = NoButton : 默认选择的按钮。
返回值:选中的按钮。
int value;
value=QMessageBox::information(this,"错误提示","基本信息提示框演示",
QMessageBox::Ok | QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Ok);
switch(value)
{
case QMessageBox::Ok:
/*处理代码*/
break;
case QMessageBox::Cancel:
/*处理代码*/
break;
case QMessageBox::Discard:
/*处理代码*/
break;
}
|
图4-1-4 基本信息提示框运行效果
5. 询问消息框
StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
|
参数信息:
QWidget *parent:父窗口指针。
const QString &title:对话框标题。
const QString &text:提示的文本信息。
StandardButtons buttons = Ok:可选择的标准按钮。
StandardButton defaultButton = NoButton:默认选择的按钮。
返回值:选中的按钮。
int value;
value=QMessageBox::question(this,"询问提示","确定退出?",
QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);
switch(value)
{
case QMessageBox::Yes:
/*处理代码*/
break;
case QMessageBox::No:
/*处理代码*/
break;
}
|
图4-1-5 询问提示框运行效果
6. 警告信息提示框
StandardButton warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
|
参数信息:
QWidget *parent:父窗口指针。
const QString &title:对话框标题。
const QString &text:提示的文本信息。
StandardButtons buttons = Ok:可选择的标准按钮。
StandardButton defaultButton = NoButton:默认选择的按钮。
返回值:选中的按钮。
int value;
value=QMessageBox::warning(this,"警告提示","配置文件未找到,请检查路径!",
QMessageBox::Ok | QMessageBox::Discard,QMessageBox::Ok);
switch(value)
{
case QMessageBox::Ok:
/*处理代码*/
break;
case QMessageBox::Discard:
/*处理代码*/
break;
}
|
图4-1-6 警告提示框运行效果
4.1.2 QMessageBox常用成员函数介绍 创建QMessageBox对话框除了用静态函数之外,还可以使用接口函数创建对话框,实现制作个性对话框。
QMessageBox msgBox;
msgBox.setText("文件内容已经被更改!");
msgBox.setInformativeText("是否需要保存更改?");
msgBox.setWindowTitle("文件提示");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Save:
//处理代码
break;
case QMessageBox::Discard:
//处理代码
break;
case QMessageBox::Cancel:
//处理代码
break;
}
|
1. 设置对话框窗口标题
void setWindowTitle(const QString &title);
|
2. 添加标准对话框按钮
void setStandardButtons(StandardButtons buttons); //添加标准对话框按钮
StandardButtons standardButtons() const;
|
StandardButtons是一个标准按钮的枚举类型。可以参考4.1.1小节。
3. 添加按钮
void addButton(QAbstractButton *button, ButtonRole role);
QPushButton *addButton(const QString &text, ButtonRole role);
QPushButton *addButton(StandardButton button);
void removeButton(QAbstractButton *button); //移除按钮
|
StandardButton是一个枚举类型,表示按钮的类型,在检测按钮是否按下时比较有用。
使用示例:
QMessageBox msgBox;
msgBox.setText("文件内容已经被更改!");
msgBox.setInformativeText("是否需要保存更改?");
msgBox.setWindowTitle("文件提示");
QPushButton *button_ok=new QPushButton("确定");
QPushButton *button_close=new QPushButton("取消");
msgBox.addButton(button_ok,QMessageBox::AcceptRole);
msgBox.addButton(button_close,QMessageBox::RejectRole);
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::AcceptRole:
//处理代码
break;
case QMessageBox::RejectRole:
//处理代码
break;
}
|
4. 添加复选框按钮
void QMessageBox::setCheckBox(QCheckBox *cb)
QCheckBox *QMessageBox::checkBox() const
|
5. 获取被点击的按钮指针
QAbstractButton *QMessageBox::clickedButton() const
|
使用示例:
QMessageBox messageBox(this);
QAbstractButton *disconnectButton =messageBox.addButton(tr("Disconnect"), QMessageBox::ActionRole);
/*…………..…*/
messageBox.exec();
if (messageBox.clickedButton() == disconnectButton) {
/*处理代码*/
}
|
6. 文本设置相关的函数
QString text() const //获取字符串文本
void setText(const QString &text) //设置消息框显示的字符串文本
QString informativeText() const //扩展文本获取
void setInformativeText(const QString &text) //扩展文本设置
Qt::TextFormat textFormat() const //获取文本格式
void setTextFormat(Qt::TextFormat format) //文本格式设置
|
7. 设置消息框默认按下的按钮
void QMessageBox::setDefaultButton(QPushButton *button)
void QMessageBox::setDefaultButton(StandardButton button)
|
8. 消息框默认图标设置
Icon icon() const
void setIcon(Icon)
|
Icon参数的可选参数:QMessageBox::NoIcon、QMessageBox::Question、QMessageBox::Information、QMessageBox::Warning、QMessageBox::Critical
9. 消息框自定义图标设置
QPixmap iconPixmap() const
void setIconPixmap(const QPixmap &pixmap)
|
使用示例:
msgBox.setIconPixmap(QPixmap("E:/msg_error.png"));
|
图4-1-7 消息框自定义图标运行效果
4.2 标准颜色对话框 QColorDialog类提供了一个用于选择颜色的对话框控件,用来给用户提供选择颜色的功能。
4.2.1 创建颜色对话框 QColorDialo类提供了一个静态函数,方便用户打开对话框获取颜色值:
QColor QColorDialog::getColor(const QColor &initia= Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString(), ColorDialogOptions options = ColorDialogOptions())
|
参数:
const QColor &initia= Qt::white :默认选择的颜色。
QWidget *parent = Q_NULLPTR:父窗口指针。
const QString &title = QString():颜色对话框的标题
ColorDialogOptions options = ColorDialogOptions():颜色对话框显示的模式
使用示例:
QColor clr=QColorDialog::getColor(Qt::white,this,tr("颜色选择"));
if(clr.isValid())
{
/*处理代码*/
}
|
图4-2-1 颜色选择框运行效果
1. 设置textEdit文本编辑器字体的颜色示例
QColor clr = QColorDialog::getColor(Qt::black); //设置默认选择的颜色为黑色
if(clr.isValid()) //如果用户选了颜色
{
ui->textEdit->setTextColor(clr); //设置textEdit文本编辑器字体的颜色
}
|
2. 设置按钮前景色示例
QColor clr = QColorDialog::getColor(Qt::black); //设置默认选择的颜色为黑色
if(clr.isValid()) //如果用户选了颜色
{
QString buttons_color = tr("color: %1").arg(clr.name());
ui->pushButton->setStyleSheet(buttons_color); //使用样式表设置按钮的前景颜色
}
|
4.2.2 Qcolor类介绍 颜色对话框getColor静态函数的返回值类型是Qcolor,Qcolor类是用来描述一组颜色的的详细信息。通常情况下色彩值会使用一组RGB(red,green,blue:红绿蓝)色彩值来表示,但有时候也会用其他的色彩值组件,比如HSV(hue,saturation,value : 色调,饱和度,阀值) ,除此之外也可以用一个颜色名来指定颜色。
图4-2-2 颜色表示方法
1. 判断颜色是否有效
booQColor::isValid() const
|
返回true表示颜色值有效。
2. 返回颜色的字符串名称
QString QColor::name() const
|
返回颜色的名称格式:“# RRGGBB”,即“#”字符后面跟着三组十六进制数字。
3. 构造颜色值
QColor::QColor(int r, int g, int b, int a = 255)
QColor::QColor(const QString &name)
|
4. 获取颜色值
QRgb QColor::rgb() const
QRgb QColor::rgba() const //包含透明值
|
4.3 标准字体对话框 QFontDialog类封装的对话框用于选择标准字体,该对话框是通过一个getFont()静态函数进行创建。
QFont getFont(boo*ok, const QFont &initial, QWidget *parent = Q_NULLPTR, const QString &title = QString(), FontDialogOptions options = FontDialogOptions())
QFont getFont(boo*ok, QWidget *parent = Q_NULLPTR)
|
参数:
boo*ok:保存了选择的状态。如果用户点击了确定按钮,ok将赋值为true,否则赋值为false。
const QFont &initial:设置对话框默认选择的字体。
QWidget *parent = Q_NULLPTR:设置父窗体
const QString &title = QString():设置对话框标题
FontDialogOptions options = FontDialogOptions():设置显示的字体类型,可过滤不需要显示字体。比如:等宽字体。
返回值:用户选择的字体由QFont字体类进行描述。
boook;
QFont font=QFontDialog::getFont(&ok, QFont("幼圆", 12),this,tr("字体选择"));
if(ok) //用户点击的了确定按钮
{
this->setFont(font); //设置当前字体
}
else //用户点击了取消按钮
{
this->setFont(font); //设置当前字体
}
|
图4-3-1 字体对话框运行效果
4.4 标准文件对话框 QFileDialog类提供了一个获取路径信息的对话框,允许用户遍历文件系统来选择一个或多个路径。QFileDialog提供了一系列静态函数,可以快速方便的创建出符合自己要求的对话框。以下将介绍QFileDialog常用的静态函数。
4.4.1 获取选择的目录路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR,
const QString &caption = QString(),
const QString &dir = QString(),
Options options = ShowDirsOnly);
|
1) 参数解析
QWidget *parent = Q_NULLPTR:父窗口指针
const QString &caption = QString():设置对话框的标题
const QString &dir = QString() :设置默认的目录。不同系统的路径风格都不一样,Linux下”/”表示根目录。
Options options = ShowDirsOnly:设置对话框显示属性。
2) 返回值
如果用户点击了取消按钮将返回空字符,点击确定按钮将返回选中的目录路径字符串。
3) 使用示例
QString dir=QFileDialog::getExistingDirectory(this,"选择目录","C:/",
QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);
//dir==返回目录的路径
|
图4-4-1 目录选择对话框运行效果
4.4.2 获取打开的文件名称 getOpenFileName函数运用在需要让用户选择文件的场合,只能选择单个文件。
static QString getOpenFileName(QWidget *parent = Q_NULLPTR,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = Q_NULLPTR,
Options options = Options());
|
1) 参数解析:
QWidget *parent = Q_NULLPTR:父窗口指针
const QString &caption = QString():设置对话框的标题
const QString &dir = QString() :设置默认的目录。不同系统的路径风格都不一样,Linux下”/”表示根目录。
const QString &filter = QString():设置需要过滤的文件后缀。
2) 返回值
如果用户点击了取消按钮将返回空字符,点击确定按钮将返回选中的目录路径字符串。
3) 使用示例
QString filename=QFileDialog::getOpenFileName(this,"选择打开的文件","C:/",tr("*.bmp *.jpg *.png"));
//filename==选择文件的绝对路径
|
图4-4-2 getOpenFileName运行效果
4.4.3 获取打开的文件名称列表 getOpenFileNames函数运用在允许让用户选择文件的场合,运行用户同时选择多个文件,比如:Ctrl+A。返回的文件名称由QStringList字符串列表保存。
static QStringList getOpenFileNames(QWidget *parent = Q_NULLPTR,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = Q_NULLPTR,
Options options = Options());
|
getOpenFileNames函数形参参考getOpenFileName函数。返回值是QStringList类型。
使用示例:
QStringList filenamelist=QFileDialog::getOpenFileNames(this,"选择打开的文件","C:/",tr("*.bmp *.jpg *.png"));
for(int i;i<filenamelist.count();i++)
{
qDebug()<<filenamelist.at(i); //循环取出列表中的文件名称
}
|
4.4.4 获取保存的文件名称 getSaveFileName函数运用在需要保存文件的场合,可以获取保存的文件名称,比如:拍照保存的、录制视频等。返回的文件名是一个QString类型。如果点击取消按钮,返回空字符串。
static QString getSaveFileName(QWidget *parent = Q_NULLPTR,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = Q_NULLPTR,
Options options = Options());
|
使用示例:
QString filename=QFileDialog::getSaveFileName(this,"保存到文件","C:/imagefile.bmp",tr("*.bmp *.jpg *.png"));
qDebug()<<filename; //文件名称
|
图4-4-3 getSaveFileName运行效果
4.5 标准输入对话框 QInputDialog类提供了的对话框允许用户输入一个值。输入的值可以是字符串、整数、浮点数、下拉框等类型。必须设置一个标签告诉用户应该输入什么数据。输入对话框一般使用QInputDialog提供的几个静态函数进行创建,下面将介绍常用的几个静态函数。
4.5.1 浮点数输入框 static double getDouble(QWidget *parent, const QString &title,
const QString &label,
double value = 0,
double minValue = -2147483647,
double maxValue = 2147483647,
int decimals = 1,
boo*ok = Q_NULLPTR,
Qt::WindowFlags flags = Qt::WindowFlags());
|
1) 参数解析:
QWidget *parent:父窗口指针
const QString &title:对话框标题
const QString &label:创建的标签,提示用户该输入什么数据。
double value = 0:设置默认显示的值
double minValue = -2147483647:最小值设置
double maxValue = 2147483647:最大值设置
int decimals = 1:设置小数位数
boo*ok = Q_NULLPTR:保存输入的状态值。
Qt::WindowFlags flags = Qt::WindowFlags():设置对话框的类型。
2) 返回值:用户输入的值。
3) 使用示例:
boook;
double d = QInputDialog::getDouble(this, tr("金额设置"),tr("输入金额:"), 37.56, -10000, 10000, 2, &ok);
if (ok)
doubleLabel->setText(QString("$%1").arg(d)); //显示输入的数值
|
图4-5-1 浮点数输入框效果图
4.5.2 整数输入框 static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,
int minValue = -2147483647, int maxValue = 2147483647,
int step = 1, boo*ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
|
使用方法与浮点数输入框类似。参数的填充可以参考浮点数输入框,其中“int step = 1”表示整数步进的步数。
使用示例:
boook;
int data = QInputDialog::getInt(this, tr("获取年龄"),tr("输入年龄:"), 20, 10, 1000, 2, &ok);
if (ok)
intLabel->setText(QString("$%1").arg(data)); //显示设置
|
图4-5-2 整数输入框效果图
4.5.3 下拉框输入 static QString getItem(QWidget *parent, const QString &title, const QString &label,
const QStringList &items, int current = 0, booeditable = true,
boo*ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(),
Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
|
1) 参数:
const QStringList &items:创建下拉框显示的选项列表。
int current = 0:设置默认选择的项目索引
booeditable = true:设置下拉框的可编辑属性
boo*ok = Q_NULLPTR:保存状态
2) 使用示例:
QStringList items;
//设置选项
items << tr("Spring春天") << tr("Summer夏天") << tr("Fall秋天") << tr("Winter 冬天");
boook;
QString item = QInputDialog::getItem(this, tr("季节选择"),tr("请选择对应的季节:"), items, 0, false, &ok);
if (ok && !item.isEmpty()) //判断用户是否点击了OK
ui->lineEdit->setText(item); //在单行编辑器显示标准输入框获取的内容
|
图4-5-3 下拉框效果图
4.5.4 多行输入框 static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label,
const QString &text = QString(), boo*ok = Q_NULLPTR,
Qt::WindowFlags flags = Qt::WindowFlags(),
Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
|
使用示例:
boook;
QString text= QInputDialog::getMultiLineText(this,"信息采集","请输入改进建议:","1. 加入时间管理",&ok);
if (ok && !text.isEmpty())
ui->lineEdit->setText(text) //在单行编辑器显示标准输入框获取的内容
|
图4-5-4 多行输入框效果图
4.5.6 单行输入框 static QString getText(QWidget *parent, const QString &title, const QString &label,
QLineEdit::EchoMode echo = QLineEdit::Normal,
const QString &text = QString(), boo*ok = Q_NULLPTR,
Qt::WindowFlags flags = Qt::WindowFlags(),
Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
|
参数:
QLineEdit::EchoMode echo = QLineEdit::Normal:设置单行编辑框的显示模式。
使用示例:
boook;
QString text = QInputDialog::getText(this, tr("文本查找"),tr("请输入查找的关键字:"), QLineEdit::Normal,
tr("qstring"),&ok);
if (ok && !text.isEmpty())
ui->lineEdit->setText(text); //在单行编辑器显示标准输入框获取的内容
|
图4-5-5 多行输入框效果图
技术合作与咨询
QQ:1126626497 关注我长按二维码可识别微信号:xl1126626497
---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:DS小龙哥 嵌入式技术资讯,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|