【Qt控件之QInputDialog】详解

news2024/11/28 18:37:10

Qt控件之QInputDialog

      • 概述
      • 常用函数
        • 枚举
        • 成员方法
        • 信号
      • 示例
      • 使用场景
      • 问题:使用QInputDialog是否可以使用正则表达式
          • 验证示例

概述

QInputDialog类提供了一个简单方便的对话框,用于从用户获取单个值。

输入值可以是字符串数字列表中的项。必须设置一个标签来告诉用户他们应该输入什么。

提供了五个静态方便函数:getText()getMultiLineText()getInt()getDouble()getItem()。所有的函数都可以以类似的方式使用,例如:

      bool ok;
      QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),
                                           tr("User name:"), QLineEdit::Normal,
                                           QDir::home().dirName(), &ok);
      if (ok && !text.isEmpty())
          textLabel->setText(text);
    bool ok;
    QString text = QInputDialog::getMultiLineText(this, tr("QInputDialog::getMultiLineText()"),
                                         tr("User name:"), tr("text"), &ok);
    if (ok && !text.isEmpty())
        ui->lineEdit->setText(text);
    bool ok;
    int text = QInputDialog::getInt(this, tr("QInputDialog::getInt()"),
                                         tr("User name:"), 0, -10, 10, 1, &ok);
    if (ok)
        ui->lineEdit->setText(QString::number(text));
    bool ok;
    int text = QInputDialog::getDouble(this, tr("QInputDialog::getDouble()"),
                                         tr("User name:"), 0, -10, 10, 2, &ok);
    if (ok)
        ui->lineEdit->setText(QString::number(text));
    bool ok;
    QString strText = QInputDialog::getItem(this, tr("QInputDialog::getItem()"),
                                             tr("User name:"), QStringList() << "hello" << "world" << "earth", 0, false, &ok);
    if(ok && !strText.isEmpty())
    {
        ui->lineEdit->setText(strText);
    }

效果图如下:
如果用户单击ok,则ok变量被设置为true;否则,设置为false。
在这里插入图片描述
标准对话框示例展示了如何使用QInputDialog以及其他内置Qt对话框。

常用函数

枚举
  1. enum QInputDialog::InputDialogOption:此enum指定影响输入对话框外观的各种选项。
常量描述解释
QInputDialog::NoButtons0x00000001Don’t display OK and Cancel buttons (useful for “live dialogs”).不要显示“确定”和“取消”按钮(对“实时对话框”很有用)。
QInputDialog::UseListViewForComboBoxItems0x00000002Use a QListView rather than a non-editable QComboBox for displaying the items set with setComboBoxItems().使用QListView而不是不可编辑的QComboBox来显示setComboBoxItems()设置的项。
QInputDialog::UsePlainTextEditForTextInput0x00000004Use a QPlainTextEdit for multiline text input. This value was introduced in 5.2.使用QPlainTextEdit进行多行文本输入。该值在5.2中引入。

调用:
可以使用void QInputDialog::setOption(InputDialogOption option, bool on = true)进行调用。

示例:

    QInputDialog dlg;
    dlg.setOption(QInputDialog::UseListViewForComboBoxItems);
    dlg.setComboBoxItems(QStringList() << "1" << "2" << "3");
    dlg.exec();

效果:
在这里插入图片描述

  1. enum QInputDialog::InputMode:这个枚举描述了对话框可以选择的不同输入模式。
常量描述解释
QInputDialog::TextInput0Used to input text strings.用于输入文本字符串。
QInputDialog::IntInput1Used to input integers.用于输入整数。
QInputDialog::DoubleInput2Used to input floating point numbers with double precision accuracy.用于输入双精度精度的浮点数。

调用:
可以使用void setInputMode(InputMode mode)进行调用。

示例:

    QInputDialog dlg;
    dlg.setInputMode(QInputDialog::IntInput);
    dlg.exec();

效果:
在这里插入图片描述

成员方法
  1. QString cancelButtonText() const:返回取消按钮的文本。
  2. QStringList comboBoxItems() const:返回下拉框的所有选项。
  3. int doubleDecimals() const:返回双精度浮点数的精度,即小数点后的位数。
  4. double doubleMaximum() const:返回双精度浮点数的最大值。
  5. double doubleMinimum() const:返回双精度浮点数的最小值。
  6. double doubleValue() const:返回当前输入的双精度浮点数值。
  7. InputMode inputMode() const:返回输入模式,可能为数值、日期、时间等。
  8. int intMaximum() const:返回整数的最大值。
  9. int intMinimum() const:返回整数的最小值。
  10. int intStep() const:返回每次增加或减少的整数值。
  11. int intValue() const:返回当前输入的整数值。
  12. bool isComboBoxEditable() const:返回下拉框是否可编辑。
  13. QString labelText() const:返回标签的文本。
  14. QString okButtonText() const:返回确认按钮的文本。
  15. void open(QObject *receiver, const char *member):打开输入对话框,并将指定的对象(receiver)和成员函数(member)连接起来,以响应对话框中的操作。
  16. InputDialogOptions options() const:返回输入对话框的选项,如是否显示取消按钮、是否可编辑等。
  17. `void setCancelButtonText(const QString &text):设置取消按钮的文本。
  18. void setComboBoxEditable(bool editable):设置下拉框是否可编辑。
  19. void setComboBoxItems(const QStringList &items):设置下拉框的所有选项。
  20. void setDoubleDecimals(int decimals):设置双精度浮点数的精度,即小数点后的位数。
  21. void setDoubleMaximum(double max):设置双精度浮点数的最大值。
  22. void setDoubleMinimum(double min):设置双精度浮点数的最小值。
  23. void setDoubleRange(double min, double max):设置双精度浮点数的范围,包括最小值和最大值。
  24. void setDoubleValue(double value):设置当前输入的双精度浮点数值。
  25. void setInputMode(InputMode mode):设置输入模式,可能为数值、日期、时间等。
  26. void setIntMaximum(int max):设置整数的最大值。
  27. void setIntMinimum(int min):设置整数的最小值。
  28. void setIntRange(int min, int max):设置整数的范围,包括最小值和最大值。
  29. void setIntStep(int step):设置每次增加或减少的整数值。
  30. void setIntValue(int value):设置当前输入的整数值。
  31. void setLabelText(const QString &text):设置标签的文本。
  32. void setOkButtonText(const QString &text):设置确认按钮的文本。
  33. void setOption(InputDialogOption option, bool on = true):设置输入对话框的选项,如是否显示取消按钮、是否可编辑等。
  34. void setOptions(InputDialogOptions options):设置输入对话框的所有选项,包括是否显示取消按钮、是否可编辑等。
  35. void setTextEchoMode(QLineEdit::EchoMode mode):设置文本回显模式,用于文本框显示文本的方式。
  36. void setTextValue(const QString &text):设置文本框的文本值。
  37. bool testOption(InputDialogOption option) const:测试输入对话框的选项是否开启。
  38. QLineEdit::EchoMode textEchoMode() const:返回文本框的文本回显模式。
  39. QString textValue() const:返回文本框的文本值。
信号
  1. void doubleValueChanged(double value):当双精度浮点数值改变时调用。参数value表示新的双精度浮点数值。
  2. void doubleValueSelected(double value):当用户从下拉框中选择一个双精度浮点数值时调用。参数value表示用户选择的双精度浮点数值。
  3. void intValueChanged(int value):当整数值改变时调用。参数value表示新的整数值。
  4. void intValueSelected(int value):当用户从下拉框中选择一个整数值时调用。参数value表示用户选择的整数值。
  5. void textValueChanged(const QString &text):当文本值改变时调用。参数text表示新的文本值。
  6. void textValueSelected(const QString &text):当用户从下拉框中选择一个文本值时调用。参数text表示用户选择的文本值。

示例

    QInputDialog dlg;
    dlg.setOkButtonText("确定");
    dlg.setCancelButtonText("取消");
    dlg.setTextValue("设置文本");
    // 设置下拉框
    dlg.setComboBoxItems(QStringList() << "1" << "2" << "3");
    // 下拉框可编辑
    dlg.setComboBoxEditable(true);
    // 设置输入模式
    dlg.setInputMode(QInputDialog::TextInput);
    // 设置显示选项
    dlg.setOption(QInputDialog::UseListViewForComboBoxItems);
    // 设置文本显示模式
    dlg.setTextEchoMode(QLineEdit::Password);
    dlg.exec();

使用场景

  1. 获取用户输入的文本信息:例如,当用户需要输入姓名、电子邮件地址或联系信息时,可以使用QInputDialoggetText方法来显示一个文本输入框,并获取用户输入的文本信息。
  2. 获取用户输入的整数或双精度浮点数:当需要获取用户输入的数字信息时,可以使用getIntgetDouble方法来显示相应的输入框,并获取用户输入的整数或双精度浮点数值。

总之,QInputDialog是一种非常方便的对话框类,可以用于各种需要获取用户输入数据的情况。

问题:使用QInputDialog是否可以使用正则表达式

QInputDialog本身并没有提供直接限制文本输入正则表达式的功能。它主要用于显示一个对话框,获取用户输入的文本、数字或日期等数据,并将其返回给调用者。

如果想要限制用户输入的文本符合特定的正则表达式规则,需要在获取到用户输入的文本后,自行进行正则表达式的验证。

可以在接收到QInputDialog返回的文本数据后,使用Qt的QRegularExpression类来进行正则表达式的验证。QRegularExpression类提供了匹配和搜索文本的方法,可以使用这些方法来判断用户输入的文本是否符合你设定的正则表达式规则。

例如,可以先通过QInputDialog获取用户输入的文本,然后使用QRegularExpression类创建一个正则表达式对象,并使用该对象的match()方法来验证用户输入的文本是否符合规则。如果匹配成功,则表示用户输入的文本符合你的要求;否则,可以提示用户输入无效并采取相应的处理措施。

需要注意的是,这种方法需要在获取到用户输入的文本后进行验证,因此可能会增加一些额外的处理时间和复杂性。

验证示例
    bool ok;
    QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),
                                         tr("User name:"), QLineEdit::Normal,
                                         QDir::home().dirName(), &ok);
    if (ok && !text.isEmpty())
    {
        QRegularExpression reg("[0-9]");
        QRegularExpressionMatch match = reg.match(text);
        if(match.hasMatch())
            ui->lineEdit->setText(text);
        else {
            QMessageBox::information(this, "", "不满足.");
        }
    }

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

X64指令基本格式

X64指令基本格式 1 REX Prefix结构2 REX prefix扩展位2.1 第一种&#xff0c;无SIB字节的内存寻址&#xff08;mod !11 &#xff09;2.2 第二种&#xff0c;寄存器到寄存器的寻址&#xff08;无内存操作数&#xff0c;mod11&#xff09;2.3 第三种&#xff0c;带SIB字节的内存寻…

JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些

垃圾回收清除算法 引用计数法 标记清除 拷贝算法 标记压缩 引用计数法 有一个引用指向对象,那么引用计数就加1,少一个引用指向,那么引用计数就减1,这种方法了解一下就好,JVM机会不会使用这种方法,因为它在每次对象赋值的时候都要维护引用计数器,且计数器本身也有一定的…

智能座舱中的人工智能数据

智能汽车——推动变革与盈利的利刃 对于汽车公司而言&#xff0c;投资于人工智能解决方案从未显得如此关键。据 Tractica 预测&#xff0c;到 2025 年&#xff0c;汽车 AI 硬件、软件和服务的市场规模将从 2017 年的 12 亿美元上升至 265 亿美元。该行业具有巨大的变革潜力&am…

高等数学啃书汇总重难点(十一)曲线积分与曲面积分

依旧是公式极其复杂恶心的一章&#xff0c;建议是&#xff1a;掌握两种线面积分的计算套路即可&#xff0c;和第8章一样属于同济版教材中最不重要的章节&#xff0c;不会对底层理解做过多考察~ 1.弧长曲线积分的几何意义 2.弧长曲线积分的定义和性质 3.弧长曲线积分的计算方式 …

GitHub项目监控

目录 github开放平台接口限流 监控某个仓库的更新状态 对于常用Github的用户来说&#xff0c;经常有一些自动化的需求。比如监控某些项目的更新情况并实时拉取&#xff0c;比如监控github全网上传的代码是否携带了公司的APIKEY&#xff0c;SECRETKEY等… github开放平台 gith…

【代码数据】2023粤港澳大湾区金融数学建模B题分享

基于中国特色估值体系的股票模型分析和投资策略 首先非常建议大家仔细的阅读这个题的题目介绍&#xff0c;还有附赠的就是那个附件里的那几篇材料&#xff0c;我觉得你把这些内容读透理解了&#xff0c;就可以完成大部分内容。然后对于题目里它主要第一部分给出了常用的估值模…

阿里云无影升级2.0 云电脑解决方案时代到来

10月31日&#xff0c;杭州云栖大会上&#xff0c;阿里云宣布无影全新升级2.0&#xff1a;从云电脑到云上解决方案&#xff0c;帮助中小企业更便捷地构建云上办公&#xff0c;并开放无影产品及解决方案能力&#xff0c;为生态合作伙伴提供企业云平台&#xff0c;帮助其打造定制化…

四川达州-全国先进计算创新大赛总结

目录 四川达州-全国先进计算创新大赛 1.三个算法&#xff0c;第三个原创的&#xff1f;&#xff08;国内对比&#xff09; 2.方案的实际落地应用&#xff1f;&#xff08;落地应用&#xff09; 3.农业数据采集有问题&#xff08;数据采集汇总&#xff09;&#xff0c;很难…

【JS】this指向

一、this指向的四种规则 1.默认绑定规则 对象指向&#xff0c;比较的是引用地址。 console.log(this window); //true console.log({} {}); //false //函数的独立调用 function test(){console.log(this window); //true } test(); 2.隐式绑定规则 谁调用…

从中序和后序遍历序列构造二叉树

注意&#xff1a;该解法是基于二叉树中的值不存在重复所写的。 代码如下&#xff0c;可开袋即食 class Solution {private Map<Integer,Integer> map;public TreeNode buildTree(int[] inorder, int[] postorder) {map new HashMap<>();for(int i 0; i < in…

Mysql数据库 6.SQL语言 分组、分页查询

分组查询—group by 分组——就是将数据表中的记录按照指定的类进行分组 关键字——group by 语法 语法中加[]的是可有可无的&#xff0c;group by一般和having一起使用 select 分组字段/聚合函数 from 表名 [where 条件] group by 分组列名 [having 条件] [order by …

3DEXPERIENCE云端项目管理小工具--Project Planner项目策划者角色

云端3DEXPERIENCE平台提供了一个协作环境&#xff0c;使企业和个人能够以全新的方式实现创新。它将人员、创意、数据和解决方案连接到一个始终在线且可用的协作和交互环境中&#xff0c;可以帮助您的企业提高执行力、生产率并加速创新。 3DEXPERIENCE中的Project Planner项目策…

操作系统 day02(特征和发展历程)

一&#xff0c;操作系统的特征 并发和并行 共享 并发和共享互为存在条件 虚拟 异步 综上所述&#xff1a; 二&#xff0c;操作系统的发展历程

基于图神经网络的联邦学习跨企业推荐

Federated Learning-Based Cross-Enterprise Recommendation With Graph Neural Networks 论文试图解决什么问题 该论文试图解决跨企业推荐系统中存在的数据共享和用户隐私保护的问题。在许多小型和中型企业中&#xff0c;由于资源有限&#xff0c;无法提供足够的数据来进行大…

FreeRTOS_信号量之优先级翻转

目录 1. 优先级翻转 2. 优先级翻转实验 2.1 实验目的 2.2 实验设计 2.3 实验程序 2.4 现象 1. 优先级翻转 在使用二值信号量的时候会遇到一个很常见的问题——优先级翻转。优先级翻转在可剥夺内核中是非常常见的&#xff0c;在实时系统中不允许出现这种现象&#xff0c;这…

代码随想录第五十七天|● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 题目&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是&qu…

VueX环境的搭建

一、安装VueX npm i vuex // Vue3安装该版本 npm i vuex3 // Vue2安装该版本 因为我使用的是Vue2&#xff0c;所以安装的是3版本 二、配置VueX文件 在src目录下创建store文件夹&#xff0c;再创建index.js 在index.js中配置如下代码&#xff1a; // VueX配置文件/…

Android广播BroadcastReceiver

BroadcastReceiver组件 BroadcastReceiver是Android中的一个组件&#xff0c;用于接收和处理系统广播或应用内广播。它可以监听系统事件或应用内自定义的广播&#xff0c;并在接收到广播时执行相应的操作。 广播是一种用于在应用组件之间传递消息的机制。通过发送广播&#x…

一个小技巧,显著提升大模型推理能力!加州大学提出MAF多反馈框架

作者 | 谢年年 最近&#xff0c;多篇文章《GPT-4的推理能力非常有限&#xff0c;有两篇论文为证》、《DeepMind&#xff1a;无法自我纠正推理&#xff0c;除非提前得知正确答案》指出大模型在推理任务中似乎没有自我改进的能力。即在无任何外部反馈的情况下无法通过自我纠正的形…

Vue3.0 toRef toRefs :VCA模式

简介 作用&#xff1a; 创建一个ref对象&#xff0c;其value值指向另一个对象中的某个属性 语法&#xff1a; const name toRef(person, name) 应用&#xff1a; 要将响应式对象中的某个属性单独供应给外部使用时 扩展&#xff1a; toRefs与toRef功能一致&#xff0c;但可…