Qt 花里胡哨系列(二)——对话框

前言

一眨眼功夫可又过去小半个月了,感叹精力大不如从前啊,事杂而多。

这篇主要聊下qt中常见的对话框,毕竟这东西还是挺常用的,除了自己写dialog外,就属qt自带的了。

QDialog

这个在聊qt的窗口的时候已经大致说过,这里就不提太多了,主要看下qt给咱提供的对话框吧。

对话框功能
QFileDialog文件/路径选择对话框
QColorDialog颜色选择对话框
QFontDialog字体选择对话框
QInputDialog输入对话框,像html的prompt
QMessageBox消息对话框,像html的alert

QFileDialog

选择一个文件

通过QFileDialog::getOpenFileName()可以选择文件,其中参数主要标题,路径,过滤器。

1
2
3
4
5
6
7
8
QString title = QStringLiteral("请选择文件");
QString dir = "";
QString filter = "*.txt;*.jpg";
QString fileName = QFileDialog::getOpenFileName(this, title, dir, filter);
if (!fileName.isEmpty())
{
// do something
}

目录留空默认是程序运行目录,如果选择过文件再打开就默认是上次选择的路径,多个过滤中间用 “;” 隔开。

选择多个文件

参数同单个文件类似,不过方法有现成的**QFileDialog::getOpenFileNames()**。

选择文件目录

通过QFileDialog::getExistingDirectory()可以选择目录。

1
2
3
4
5
6
7
QString title = QStringLiteral("请选择目录");
QString dir = "";
QString selectDir = QFileDialog::getExistingDirectory(this, title, dir);
if (!selectDir.isEmpty())
{
// do something
}
选择保存文件

同选择文件类似,方法为QFileDialog::getSaveFileName(),如选择已有文件会提示是覆盖。

QColorDialog

1
2
3
4
5
6
QString title = QStringLiteral("请选择颜色");
QColor color = QColorDialog::getColor(Qt::white, this, title);
if (color.isValid())
{
// do something
}

这里说明下,qt默认的都是英文的,如果需要显示中文的话,那要在qt的安装目录找到这个qt_zh_CN.qm文件添加到当前工程的资源文件,然后生成出翻译文件,通过程序加载对应的文件资源即可,这里不多说,有需要的话到时候可以跟我联系。

QFontDialog

字体对话框用法跟前面几个稍微不同,因为QFont自己没有是否有效这个属性,所以要通过传入一个bool值来判断是否已经选择。

1
2
3
4
5
6
bool isSuccess = false;
QFont font = QFontDialog::getFont(&isSuccess);
if (isSuccess)
{
// do something
}

也可以通过传入一个QFont来作为当前选中,另外像title这种就不特别写出来演示了。

QInputDialog

输入对话框提供了几种输入方式:

  • 文本 QInputDialog::getText()/getMultiLineText()
  • 整型数字 QInputDialog::getInt()
  • 浮点型数字 QInputDialog::getDouble()
  • 选项 QInputDialog::getItem()

具体方法就不展示了,除选项需要额外输入一个选项的QStringList外,其他参数都是类似,除了返回值不同。

QMessageBox

消息对话框是一种比较常用的与用户交互的对话框,可以用于显示提示、警告、错误等信息供用户确认,不过其实大致看下,实际还是包含标题、内容、图标、按钮等这些常规信息,至于confirm的实现实际上也是QDialog显示一个按钮还是多个按钮的不同罢了。

小结

感觉这篇有点儿水,毕竟对话框这种东西看代码都会用,没必要单独列出来,这篇就当给萌新了。


Qt 花里胡哨系列(二)——对话框
http://www.aprilblank.top/qt/dialog.html
作者
AprilBlank
发布于
2022年9月1日
许可协议