当前位置: 代码网 > it编程>编程语言>C/C++ > 《十一》Qt各种对话框之QInputDialog

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

2024年07月28日 C/C++ 我要评论
用户输入完毕后,将输入的学号赋值给strTest变量。参数里 parent 是父窗口指针,title 为对话框标题栏文本,label 是提示标签的文本,value 是初始值,min 为整数范围下限,max 是整数范围上限,step 是旋钮框的步进,ok 指针用于指向表示点击“OK”或“Cancel”的状态变量,flags 是窗口标志位。上图标题栏文本 title 为“设置整数”,对话框带的提示标签 label 为“请输入整数值”,两个按钮显示默认的“OK”和“Cancel”文本。

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。

运行结果:

感谢阅读!!!!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com