C++ Qt开发:标准Dialog对话框组件

王柳  金牌会员 | 2024-2-22 04:44:59 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍标准对话框QInputDialog、QFileDialog 这两种对话框组件的常用方法及灵活运用。
在 Qt 中,标准对话框提供了一些常见的用户交互界面,用于执行特定任务,例如获取用户输入、选择文件路径、显示消息等。这些对话框通常具有标准化的外观和行为,使得在不同的平台上能够保持一致性。在一般的开发过程中,标准对话框是开发者常用的工具之一。
1.1 QInputDialog

QInputDialog 类提供了一种简单的方法,用于获取用户的输入。它可以用于获取文本、整数、浮点数等类型的输入。
以下是 QInputDialog 类的一些常用方法的说明和概述,以表格形式列出:
方法描述getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) -> QString显示一个文本输入对话框,返回用户输入的文本。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()) -> int显示一个整数输入对话框,返回用户输入的整数。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()) -> double显示一个浮点数输入对话框,返回用户输入的浮点数。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) -> QString显示一个列表输入对话框,返回用户选择的项。getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) -> QString显示一个多行文本输入对话框,返回用户输入的文本。这些方法提供了不同类型的输入对话框,包括文本、整数、浮点数、列表等。通过这些方法,开发者可以方便地与用户交互,获取用户输入的信息。需要注意的是,这些方法都是静态方法,可以直接通过类名 QInputDialog 调用。
为了方便展示这四种标准输入框的使用,此处读者可自行绘制如下所示的页面UI布局,并自行导入#include 与#include 两个头文件;

1.1.3 文本输入

通过getText方法实现,QInputDialog::getText 是 Qt 中用于显示一个简单的对话框,其中包含一个用于输入文本的字段的静态方法。这个方法通常用于获取用户输入的文本。
方法的参数包括:

  • parent: 对话框的父窗口。传入 nullptr 表示没有父窗口。
  • caption: 对话框的标题。
  • label: 输入字段上方的文本标签。
  • echo: 输入文本时的回显模式,可以是 QLineEdit::Normal、QLineEdit::NoEcho 等。
  • text: 初始文本。
  • ok: 一个布尔指针,用于获取对话框的 OK 按钮的状态。
  • flags: 可选的窗口标志。
方法返回用户输入的文本,如果用户取消了对话框,则返回一个空字符串。你可以根据需要调整标签、初始文本、回显模式等参数,以满足你的具体需求。
该方法要求用户传入标题EchoMode等必备参数,需要注意的是如果读者想要输入时隐藏显示文本则可以直接设置QLineEdit:assword为密码模式,此时输入的密码将会被*号代替,代码如下;
  1. void MainWindow::on_pushButton_text_clicked()
  2. {
  3.     QString dlgTitle="输入文字对话框";
  4.     QString txtLabel="请输入文件名";
  5.     QString defaultInput="新建文件.txt";
  6.     QLineEdit::EchoMode echoMode=QLineEdit::Normal;       // 正常文字输入
  7.     // QLineEdit::EchoMode echoMode=QLineEdit::Password;  // 密码输入
  8.     bool flag = false;
  9.     QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &flag);
  10.     if (flag && !text.isEmpty())
  11.     {
  12.         ui->plainTextEdit->appendPlainText(text);
  13.     }
  14. }
复制代码
代码运行后点击文本输入按钮,则可弹出输入框,如下所示;

1.1.2 整数输入

通过getInt方法实现,QInputDialog::getInt 是 Qt 中用于显示一个简单的对话框,其中包含一个用于输入整数的字段的静态方法。这个方法通常用于获取用户输入的整数。
方法的参数包括:

  • parent: 对话框的父窗口。传入 nullptr 表示没有父窗口。
  • caption: 对话框的标题。
  • label: 输入字段上方的文本标签。
  • value: 初始值。
  • min: 最小值。
  • max: 最大值。
  • step: 步长,表示每次增减的量。
  • ok: 一个布尔指针,用于获取对话框的 OK 按钮的状态。
  • flags: 可选的窗口标志。
方法返回用户输入的整数,如果用户取消了对话框,则返回 0。你可以根据需要调整标签、初始值、范围、步长等参数,以满足你的具体需求。
该方法提供了一个SpinBox选择框,在输入时可以通过传入minValue限制最小值,maxValue限制最大值,通过stepValue设置每次步长,代码如下;
  1. void MainWindow::on_pushButton_int_clicked()
  2. {
  3.     QString dlgTitle="输入整数对话框";
  4.     QString txtLabel="设置字体大小";
  5.     int defaultValue=ui->plainTextEdit->font().pointSize();   // 现有字体大小
  6.     int minValue=6, maxValue=50, stepValue=1;                 // 范围(步长)
  7.     bool flag=false;
  8.     int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,stepValue,&flag);
  9.     if (flag)
  10.     {
  11.         QFont font=ui->plainTextEdit->font();
  12.         font.setPointSize(inputValue);
  13.         ui->plainTextEdit->setFont(font);
  14.         // 显示在编辑框内
  15.         QString stringValue = QString::number(inputValue);
  16.         ui->plainTextEdit->appendPlainText(stringValue);
  17.     }
  18. }
复制代码
代码运行后点击整数输入按钮,则可弹出输入框,整数选择最小被限制在了6而最大限制为50,如下所示;

1.1.3 浮点数输入

通过getDouble方法实现,QInputDialog::getDouble 是 Qt 中用于显示一个简单的对话框,其中包含一个用于输入浮点数的字段的静态方法。这个方法通常用于获取用户输入的浮点数。
方法的参数包括:

  • parent: 对话框的父窗口。传入 nullptr 表示没有父窗口。
  • caption: 对话框的标题。
  • label: 输入字段上方的文本标签。
  • value: 初始值。
  • min: 最小值。
  • max: 最大值。
  • decimals: 小数位数。
  • ok: 一个布尔指针,用于获取对话框的 OK 按钮的状态。
  • flags: 可选的窗口标志。
方法返回用户输入的浮点数,如果用户取消了对话框,则返回 0.0。你可以根据需要调整标签、初始值、范围、小数位数等参数,以满足你的具体需求。
该方法提供了一个SpinBox选择框,浮点数的输入同样可以限制输入长度,同时浮点数也可以指定小数点的位数,通过decimals指定为两位显示,代码如下;
  1. void MainWindow::on_pushButton_float_clicked()
  2. {
  3.     QString dlgTitle="输入浮点数对话框";
  4.     QString txtLabel="输入一个浮点数";
  5.     float defaultValue=3.13;
  6.     float minValue=0, maxValue=10000;  // 范围
  7.     int decimals=2;                    // 小数点位数
  8.     bool flag=false;
  9.     float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,decimals,&flag);
  10.     if (flag)
  11.     {
  12.         QString str=QString::asprintf("输入了一个浮点数:%.2f",inputValue);
  13.         ui->plainTextEdit->appendPlainText(str);
  14.     }
  15. }
复制代码
代码运行后点击浮点数输入按钮,则可弹出输入框,浮点数选择最小被限制在了0而最大限制为10000,默认值为3.13保留长度为两位,如下所示;

1.1.4 单选框输入

通过getItem方法实现,该方法适合于只让用户选择特定的内容,QInputDialog::getItem 是 Qt 中用于显示一个简单的对话框,其中包含一个下拉框(QComboBox)供用户选择的静态方法。这个方法通常用于获取用户从列表中选择的项。
方法的参数包括:

  • parent: 对话框的父窗口。传入 nullptr 表示没有父窗口。
  • caption: 对话框的标题。
  • label: 下拉框上方的文本标签。
  • items: 字符串列表,表示下拉框中的选项。
  • currentItem: 初始时被选中的项的索引。
  • editable: 是否允许用户编辑下拉框中的文本。
  • ok: 一个布尔指针,用于获取对话框的 OK 按钮的状态。在这个例子中,我们传递了 nullptr,因为我们不关心 OK 按钮的状态。
  • flags: 可选的窗口标志。
方法返回用户选择的项,如果用户取消了对话框,则返回一个空字符串。你可以根据需要调整标签、初始选中项、是否可编辑等参数,以满足你的具体需求。代码如下所示;
  1. void MainWindow::on_pushButton_checkbox_clicked()
  2. {
  3.     QStringList items;                        // 列表内容
  4.     items <<"优秀"<<"良好"<<"合格"<<"不合格";    // 放入列表
  5.     QString dlgTitle="条目选择对话框";
  6.     QString txtLabel="请选择级别";
  7.     int curIndex=0;                            // 初始选择项
  8.     bool editable=false;                       // 是否可编辑
  9.     bool flag=false;
  10.     QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&flag);
  11.     if (flag && !text.isEmpty())
  12.     {
  13.         ui->plainTextEdit->appendPlainText(text);
  14.     }
  15. }
复制代码
打开效果图如下所示;

同理,当我们需要选择多个文件并打开时只需要将QString修改为QStringList这样当文件被打开后则可以通过循环输出fileList列表来获取所有路径信息,如下代码所示;
  1. void MainWindow::on_pushButton_file_clicked()
  2. {
  3.     QString curPath=QDir::currentPath();                                       // 获取系统当前目录
  4.     //  QString  curPath=QCoreApplication::applicationDirPath();               // 获取应用程序的路径
  5.     QString dlgTitle="选择一个文件";                                             // 对话框标题
  6.     QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)";  // 文件过滤器
  7.     QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
  8.     if (!aFileName.isEmpty())
  9.     {
  10.         ui->plainTextEdit->appendPlainText(aFileName);
  11.     }
  12. }
复制代码
在选择时可以通过拖拽选中的方式选择多个文件,如下图所示;

2.1.2 选择目录

选择目录时可以调用getExistingDirectory方法,QFileDialog::getExistingDirectory 是 Qt 中用于显示选择目录对话框并获取用户选择的目录的静态方法。它通常用于在用户需要选择一个目录时,例如保存文件到特定目录或加载文件等场景。
方法的参数包括:

  • parent: 对话框的父窗口。传入 nullptr 表示没有父窗口。
  • caption: 对话框的标题。
  • dir: 默认的目录路径。
  • options: 对话框的选项。在示例中,使用了 QFileDialog::ShowDirsOnly 表示只显示目录,并且 QFileDialog:ontResolveSymlinks 表示不解析符号链接。
方法返回用户选择的目录路径,如果用户取消了对话框,则返回一个空字符串。你可以根据需要调整默认目录、选项等参数,以满足你的具体需求。
  1. void MainWindow::on_pushButton_multiple_clicked()
  2. {
  3.     // QString curPath=QCoreApplication::applicationDirPath();                // 获取应用程序的路径
  4.     QString curPath=QDir::currentPath();                                      // 获取系统当前目录
  5.     QString dlgTitle="选择多个文件";                                            // 对话框标题
  6.     QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件过滤器
  7.     QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
  8.     for (int i=0; i<fileList.count();i++)
  9.     {
  10.         // 循环将文件路径添加到列表中
  11.         ui->plainTextEdit->appendPlainText(fileList.at(i));
  12.     }
  13. }
复制代码
选择目录输出效果图如下所示;

2.1.3 保存文件

保存文件可以通过调用getSaveFileName方法来实现,QFileDialog::getSaveFileName 是 Qt 中用于显示保存文件对话框并获取用户选择的文件名的静态方法。它通常用于在用户将文件保存到磁盘时获取文件的保存路径。
该方法的参数包括:

  • parent: 对话框的父窗口。传入 nullptr 表示没有父窗口。
  • caption: 对话框的标题。
  • dir: 默认的目录路径。
  • filter: 文件类型过滤器,用于筛选可保存的文件类型。可以使用分号分隔多个过滤器,例如 "Text Files (*.txt);;All Files (*)"。
方法返回用户选择的文件名,如果用户取消了对话框,则返回一个空字符串。你可以根据需要调整过滤器、默认目录等参数,以满足你的具体需求。
  1. void MainWindow::on_pushButton_dirfile_clicked()
  2. {
  3.     QString curPath=QCoreApplication::applicationDirPath();    // 获取应用程序的路径
  4.     // QString curPath=QDir::currentPath();                    // 获取系统当前目录
  5.     // 调用打开文件对话框打开一个文件
  6.     QString dlgTitle="选择一个目录";                             // 对话框标题
  7.     QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
  8.     if (!selectedDir.isEmpty())
  9.     {
  10.         ui->plainTextEdit->appendPlainText(selectedDir);
  11.     }
  12. }
复制代码
保存文件对话框如下图所示,当点击后则可以将文件保存到特定目录下;


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表