《十一》Qt各种对话框之QInputDialog

news2024/11/15 11:02:23

QInputDialog

QInputDialog 用于方便快捷地获取一个用户输入数据,支持整数 int、浮点数 double、文本 QString 三种数据。按照 QInputDialog 内部的输入控件,又可以分为整数输入控件 QSpinBox、浮点数输入控件 QDoubleSpinBox、单行文本输入控件 QLineEdit、多行文本输入控件 QPlainTextEdit、组合框输入控件 QComboBox 等。QInputDialog 将这些常见输入控件包装成输入对话框形式,方便获取用户输入。
QInputDialog 可以作为自定义对话框对象使用,也可以使用静态函数直接弹窗获取输入。
QInputDialog 构造函数比较简单:

QInputDialog(QWidget * parent = 0, Qt::WindowFlags flags = 0)

参数里可以指定父窗口指针和窗口标志位。
构建输入对话框之后,可以设置其输入模式:

void    setInputMode(InputMode mode)  //设置整数、浮点数或文本输入模式
InputMode    inputMode() const  //获取当前输入模式

输入模式枚举常量如下表所示:

我们下面按照输入控件的类型分别介绍 QInputDialog 功能,先介绍输入对话框的普通成员函数,最后介绍常用的静态成员函数。

(1)整数输入

QInputDialog 整数输入对话框如下图所示:

上图标题栏文本 title 为“设置整数”,对话框带的提示标签 label  为“请输入整数值”,两个按钮显示默认的“OK”和“Cancel”文本。整数使用 QSpinBox 获取整数,可以定制整数取值范围和旋钮步进,相关函数如下 表所示:

对话框处于显示状态,整数值变化时,触发信号:

void    intValueChanged(int value)

 如果用户点击了“OK”按钮,对话框关闭,触发最终选择整数值的信号:

void    intValueSelected(int value)
(2)浮点数输入

QInputDialog 浮点数输入对话框如下图所示:

上图标题栏文本 title 为“设置浮点数”,提示标签 label 的文本为“请输入浮点数值:”,浮点数旋钮框的小数点后面只显示了一位。详细的浮点数输入定 制函数如下表所示:

对话框处于显示状态,浮点数变化时,触发信号:

void    doubleValueChanged(double value)

 如果用户点击了“OK”按钮,对话框关闭,触发最终选择浮点数值的信号:

void    doubleValueSelected(double value)
(3)单行文本输入

QInputDialog 单行文本输入对话框如下图所示:

用户输入文本后点击“OK”按钮或者按 Enter 键就会返回一行文本 QString;如果用户点击“Cancel”按钮或者按 Esc 键,返回空字符串。单行文本输入相关函数如下:

文本回显模式就是 QLineEdit::EchoMode 单行编辑器的枚举常量,如下表所示: 

对话框处于显示状态,文本变化时,触发信号:

void    textValueChanged(const QString & text)

 如果用户点击了“OK”按钮,对话框关闭,触发最终输入文本的信号:

void    textValueSelected(const QString & text)
(4)组合框条目输入

QInputDialog 组合框条目输入对话框如下图所示:

组合框右边可以点击三角形图标,展开条目列表。默认情况组合框内嵌的编辑框是可以直接编辑文本的。组合框条目输入相关函数如下:

 

组合框获取的也是文本,所以其触发的信号与单行文本输入时的情况一样,也是 textValueChanged() 和 textValueSelected() 。 

(5)其他普通成员函数

输入对话框可以定制提示标签和两个按钮的文本,相关函数如下:

QString    labelText() const   //获取提示标签文本
QString    okButtonText() const   //获取“OK”按钮文本
QString    cancelButtonText() const   //获取“Cancel”按钮文本
void    setLabelText(const QString & text)   //设置提示标签文本
void    setOkButtonText(const QString & text)   //设置“OK”按钮文本
void    setCancelButtonText(const QString & text)   //设置“Cancel”按钮文本

输入对话框也重载了基类的打开函数:

void    open(QObject * receiver, const char * member)

该函数会一次性绑定信号到参数 receiver 对象的 member 槽函数,关联槽函数时,根据槽函数的参数自动判断使用输入对话框对应的信号:

①如果 member 槽函数第一个参数是 QString,将  textValueSelected()  信号关联到槽函数。
②如果 member 槽函数第一个参数是 int,将 intValueSelected() 信号关联到槽函数。
③如果 member 槽函数第一个参数是 double,将 doubleValueSelected() 信号关联到槽函数。
④如果 member 槽函数没有参数,将 accepted() 信号关联到槽函数。

对话框关闭时,自动解除上述信号和槽函数的关联。

输入对话框也有几个选项标志位,相关函数如下:

InputDialogOptions    options() const  //获取对话框选项
void    setOptions(InputDialogOptions options)  //设置对话框选项
void    setOption(InputDialogOption option, bool on = true)  //设置一个选项标志位
bool    testOption(InputDialogOption option) const   //测试一个选项标志位是否为 true

 QInputDialog::​InputDialogOptions 标志位枚举常量如下表所示:

对于 QInputDialog 自定义对话框,如果设置 QInputDialog::TextInput 文本输入模式,那么默认采用单行编辑器输入文本,如果希望输入多行文本,那么还需要将选项标志位 QInputDialog::UsePlainTextEditForTextInput 设为 true,这样才会启用多行编辑器。
静态函数 getMultiLineText() 也会自动设置 QInputDialog::UsePlainTextEditForTextInput 标志位为 true ,启用多行编辑。多行编辑输入对话框如下图所示: 

 

 (6)静态成员函数

 QInputDialog 五种输入控件对应五个静态函数:

①获取整数值

int    getInt(QWidget * parent, const QString & title, const QString & label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool * ok = 0, Qt::WindowFlags flags = 0)

参数里 parent 是父窗口指针,title 为对话框标题栏文本,label 是提示标签的文本,value 是初始值,min 为整数范围下限,max 是整数范围上限,step 是旋钮框的步进,ok 指针用于指向表示点击“OK”或“Cancel”的状态变量,flags 是窗口标志位。

②获取浮点数值

double    getDouble(QWidget * parent, const QString & title, const QString & label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool * ok = 0, Qt::WindowFlags flags = 0)

 getDouble() 与 getInt() 类似,只是把步进变量换成了小数点后的位数变量。

③获取单行文本

QString    getText(QWidget * parent, const QString & title, const QString & label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString & text = QString(), bool * ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

 getText() 参数里 mode 是字符回显模式,text 是初始的文本,ok 指针用于指向表示点击“OK”或“Cancel”的状态变量,flags 是窗口标志位变量,inputMethodHints 是输入方式提示,比如密码、时间、数字等输入类型提示。inputMethodHints 特性是从基类 QWidget 继承的,仅仅是提示功能,不会限制任何输入,一般可以忽略。

④获取多行文本 

QString    getMultiLineText(QWidget * parent, const QString & title, const QString & label, const QString & text = QString(), bool * ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

 多行文本使用 QPlainTextEdit 输入多行文本,没有 QLineEdit 控件的回显模式设置,其他参数与 getText() 参数类似。

⑤获取组合框条目文本 

QString    getItem(QWidget * parent, const QString & title, const QString & label, const QStringList & items, int current = 0, bool editable = true, bool * ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

 getItem() 也是获取文本,只是用组合框保存多个文本条目,供用户选择或编辑。参数 items 是条目文本列表,current 是默认选中的条目序号editable 表示组合框内嵌编辑器是否可以编辑文本,其他参数与 getText() 参数类似。

例子:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<qpushbutton.h>
#include<QLineEdit>
#include<QGridLayout>
#include<QInputDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    QGridLayout *glayout;//定义布局
    QPushButton *inputStubtn;
    QLineEdit *inputStuline;

    QPushButton *inputNambtn;
    QLineEdit *inputNamline;

    QPushButton *inputSexbtn;
    QLineEdit *inputSexline;

    QPushButton *inputScrbtn;
    QLineEdit *inputSrcline;

private slots:
    void ModifyStu();
    void ModifySex();


};

 

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(300,150);
    setWindowTitle("标准对话框");

    //布局
    glayout=new QGridLayout(this);
    inputStubtn=new QPushButton;
    inputStubtn->setText("学生学号:");
    inputStuline=new QLineEdit("20221010");

    inputNambtn=new QPushButton;
    inputNambtn->setText("学生姓名:");
    inputNamline=new QLineEdit("颤三");

    inputSexbtn=new QPushButton;
    inputSexbtn->setText("学生性别:");
    inputSexline=new QLineEdit("女");

    inputScrbtn=new QPushButton;
    inputScrbtn->setText("学生分数:");
    inputSrcline=new QLineEdit("99");

    glayout->addWidget(inputStubtn,0,0);
    glayout->addWidget(inputStuline,0,1);
    glayout->addWidget(inputNambtn,1,0);
    glayout->addWidget(inputNamline,1,1);
    glayout->addWidget(inputSexbtn,2,0);
    glayout->addWidget(inputSexline,2,1);
    glayout->addWidget(inputScrbtn,3,0);
    glayout->addWidget(inputSrcline,3,1);

    connect(inputStubtn,SIGNAL(clicked()),this,SLOT(ModifyStu()));
    connect(inputSexbtn,SIGNAL(clicked()),this,SLOT(ModifySex()));

}

Dialog::~Dialog()
{
}

void Dialog::ModifyStu()
{
    bool isbool;
    QString strTest=QInputDialog::getText(this,"标准输入对话框","请输入学号:",
                                          QLineEdit::Normal,inputStuline->text(),&isbool);
    if(isbool&&!strTest.isEmpty()){
        inputStuline->setText(strTest);
    }
}

void Dialog::ModifySex()
{
    QStringList strSexText;
    strSexText<<"男"<<"女";

    bool isbool;
    QString strSexItem=QInputDialog::getItem(this,"标准输入","请选择",strSexText,0,false,&isbool);
    if(isbool&&!strSexItem.isEmpty()){
        inputSexline->setText(strSexItem);
    }
}

解释:在头文件中定义一些按钮和输入栏,方便显示学生信息,在定义槽函数,可以根据自己的 想法来定义。用来触发一些事件

在源文件中:我们先初始化在头文件定义的一些量。

后面两个槽函数是一个对话框类(Dialog)中的两个成员函数(ModifyStu和ModifySex)的实现。这两个函数用于修改学生的学号和性别。

函数ModifyStu()使用了标准输入对话框(QInputDialog::getText)来获取用户输入的学号。首先,它创建了一个布尔型变量isbool来判断用户是否点击了对话框的确定按钮。然后,使用QInputDialog::getText函数弹出一个对话框,提示用户输入学号。对话框的标题为"标准输入对话框",默认输入框中显示的文本为inputStuline的文本。用户输入完毕后,将输入的学号赋值给strTest变量。最后,如果isbool为true且strTest不为空,则将inputStuline的文本设置为strTest。

函数ModifySex()使用了标准输入对话框(QInputDialog::getItem)来获取用户选择的性别。首先,它创建了一个字符串列表strSexText,其中包含了"男"和"女"两个选项。然后,它创建了一个布尔型变量isbool来判断用户是否点击了对话框的确定按钮。接着,使用QInputDialog::getItem函数弹出一个对话框,提示用户选择性别。对话框的标题为"标准输入",选项列表为strSexText,初始选中项为索引0,用户只能选择一个选项。用户选择完毕后,将选择的性别赋值给strSexItem变量。最后,如果isbool为true且strSexItem不为空,则将inputSexline的文本设置为strSexItem。

运行结果:

感谢阅读!!!!

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

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

相关文章

AI大模型日报#0428:AI聊天半年涨粉1000万、元象发布多模态XVERSE-V、字节发布视觉ViTamin

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。AI大模型日报今日要点&#xff1a; 今日&#xff0c;AI大模型领域动作频频&#xff0c;多家科技巨头和初创公司展示了其最新研发成果。快手…

暗区突围如何申请测试资格?暗区突围测试申请的方法轻松掌握

游戏中健康系统与其它射击游戏有很大区别&#xff0c;根据受伤部位、伤势的不同&#xff0c;会有不同的表现。除了头部之外&#xff0c;其它部位如果损坏后继续受到伤害&#xff0c;那么伤害将会分摊到身体其它部位。在暗区内或者暗区外都可以对角色进行治疗&#xff0c;角色不…

FebHost:深入分析企业海外市场选通用域名还是国别域名?

企业想进入海外在线市场&#xff0c;非常重要的一个环节是如何选择一个在线品牌域名&#xff0c;很多企业面临着选择.COM还是国别域名。以下是一些需要考虑的因素。 域名可用性 一个网站的域名可以给人留下深刻的品牌印象。新企业更倾向于选择 .com、.net 和 .org 等标准通用顶…

【哔哩哔哩笔试题汇总】2024-04-28-哔哩哔哩春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新b站近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497…

由于找不到msvcr120.dll,无法继续执行代码

在日常编程中&#xff0c;缺少关键的msvcr120.dll文件可能会导致代码无法执行&#xff0c;给我们带来不便。针对缺少msvcr120.dll文件的情况&#xff0c;我们可以采取一些有效的解决方法来解决这一问题。通过下载安装或使用Visual C Redistributable工具安装该msvcr120.dll文件…

MySQL/MariaDB 如何查看当前的用户

MySQL 的所有数据库用户信息是存储在 user 数据表中的。 可以在登录成功数据后运行 SQL&#xff1a; MariaDB [(none)]> select user,host from user;就可以查看到数据中的所有用户信息。 MariaDB [(none)]> select user,host from user; ERROR 1046 (3D000): No databa…

K8S哲学 - statefulSet 灰度发布

kubectl get - 获取资源及配置文件 kubectl get resource 【resourceName -oyaml】 kubectl create - 指定镜像创建或者 指定文件创建 kubectl create resource 【resourceName】 --imagemyImage 【-f my.yaml】 kubectl delete kubectl describe resource resourc…

医院敏感文件交互 如何保障安全和效率?

医院会产生大量的敏感文件&#xff0c;这些敏感文件交互时&#xff0c;都需要使用特殊的手段&#xff0c;来保障数据的安全性。 医院的敏感数据主要包括以下几类&#xff1a; 1、患者基本信息&#xff1a;包括患者的姓名、身份证号码、户籍地或现住址、联系方式、文化程度、既…

LeetCode - LCR 179.查找总价格为目标值的两个商品

一. 题目链接 LeetCode - LCR 179. 查找总价格为目标值的两个商品 解法&#xff08;双指针 - 对撞指针&#xff09;&#xff1a; 算法思路&#xff1a; 注意到本题是升序的数组&#xff0c;因此可以用「对撞指针」优化时间复杂度。 算法流程&#xff1a; 初始化left &#…

el-form 表单设置某个参数非必填验证

html <el-form ref"form" :rules"rules"><el-form-item prop"tiktokEmail" label"邮箱" ><el-input v-model"form.tiktokEmail" placeholder"邮箱" ></el-input></el-form-item&…

一篇了解reactor框架特性

一篇了解reactor框架特性 本文档的一些典型的名词如下&#xff1a; Publisher&#xff08;发布者&#xff09;、Subscriber&#xff08;订阅者&#xff09;、Subscription&#xff08;订阅 n.&#xff09;、subscribe&#xff08;订阅 v.&#xff09;。event/signal&#xff0…

一文搞懂 One-Hot Encoding(独热编码)

文章目录 前言 1、独热编码的原理 2、独热编码的分类 3、独热编码的应用 前言 本文将从独热编码的原理、独热编码的分类、独热编码的应用三个方面&#xff0c;来展开介绍独热编码 One-Hot Encoding。 1、独热编码的原理 特征数字化&#xff1a;将分类变量&#xff08;或称为离…

手机测试之-adb

一、Android Debug Bridge 1.1 Android系统主要的目录 1.2 ADB工具介绍 ADB的全称为Android Debug Bridge,就是起到调试桥的作用,是Android SDK里面一个多用途调试工具,通过它可以和Android设备或模拟器通信,借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多…

艾体宝案例 | 使用Redis和Spring Ai构建rag应用程序

随着AI技术的不断进步&#xff0c;开发者面临着如何有效利用现有工具和技术来加速开发过程的挑战。Redis与Spring AI的结合为Java开发者提供了一个强大的平台&#xff0c;以便快速构建并部署响应式AI应用。探索这一整合如何通过简化的开发流程&#xff0c;让开发者能够更专注于…

python——井字棋游戏——登入注册界面

本篇文章只讲解登入和注册页面&#xff0c;在后面的文章中会讲解井字棋游戏&#xff0c;然后把井字棋和登入界面进行连接&#xff0c;整合成一个完整的游戏。 登入注册界面在本篇文章的末尾。 1.实现登入界面 &#xff08;1&#xff09;导入图片 把这张图片存储在与代码路径…

小程序的合同是怎么样写的

​很多商家找第三方做小程序都遭遇到了各种问题&#xff0c;如访问速度慢、服务器关闭、反复收费等。如果当初商家找的是正规的第三方服务商&#xff0c;双方签订了明确的合同条款&#xff0c;出现任何问题后&#xff0c;相信都能够进行解决。下面将具体介绍合同内容&#xff0…

面试高频:什么情况下要用到缓存?如何应对缓存穿透、击穿及雪崩?

一、为什么要使用内存数据库&#xff1f; 我们先来看一下以往单体的Web系统架构图是什么样的&#xff1a; 从图中可以看出&#xff0c;早期的单体架构基本上是以业务为导向&#xff0c;同时用户群体不是很大&#xff0c;这种单体的架构基本上可以应付大多数使用场景。但随着互…

Springboot+Vue项目-基于Java+MySQL的商业辅助决策系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

数据分析:生存分析原理和应用实例

介绍 生存分析的目的是分析某个时间点的“生存概率”是多少。基于这样的研究目的,需要提供生存数据,它是一种由不同的开始时间和结束时间组成的事件-时间的数据,比如在癌症研究领域,研究手术到死亡的过程、治疗到疾病进展等等。 在开展生存分析前,需要了解什么是删失(c…

博途安装【PLC】

1【安装】 mp.weixin.qq.com Pro功能强于Adv 关于Prof版本和Adv版本的区别&#xff0c;可以参考下图&#xff0c;专业版是包含高级版的&#xff0c;我们选择专业版进行安装 双击TIA_Portal_STEP7_Prof_Safety_WINCC_Prof_V16.exe进行安装 解压安装 如果电脑死循环重启&#…