十九、输入对话框

十九、输入对话框QInputDialog

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

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

完成以下功能

十九、输入对话框_第1张图片

十九、输入对话框_第2张图片

创建一个QDialog工程

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include 

#include
#include
#include
#include

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    Ui::Dialog *ui;

    QPushButton *noButton;
    QLineEdit *noEdit;

    QPushButton *nameButton;
    QLineEdit *nameEdit;

    QPushButton *sexButton;
    QLineEdit *sexEdit;

    QPushButton *scoreButton;
    QLineEdit *scoreEdit;

private slots:
    void noFunc();
    void sexFunc();
};
#endif // DIALOG_H

 dialog.cpp

先把基础的对象和布局完成

    QGridLayout *gl=new QGridLayout(this);

    noButton=new QPushButton("学号");
    noEdit=new QLineEdit("202154515");

    nameButton=new QPushButton("姓名");
    nameEdit=new QLineEdit("张三");

    sexButton=new QPushButton("性别");
    sexEdit=new QLineEdit("男");

    scoreButton=new QPushButton("分数");
    scoreEdit=new QLineEdit("90");

    gl->addWidget(noButton,0,0);
    gl->addWidget(noEdit,0,1);
    gl->addWidget(nameButton,1,0);
    gl->addWidget(nameEdit,1,1);
    gl->addWidget(sexButton,2,0);
    gl->addWidget(sexEdit,2,1);
    gl->addWidget(scoreButton,3,0);
    gl->addWidget(scoreEdit,3,1);

 首先实现noFunc()函数

void Dialog::noFunc()
{
    bool ok;
    QString strText=QInputDialog::getText(this,"标准输入对话框","请输入学号",QLineEdit::Normal,noEdit->text(),&ok);

    if(ok && !strText.isEmpty())
    {
        noEdit->setText(strText);
    }
}

QString 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(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone):

静态便利函数,用于从用户那里获取字符串。

title 是显示在对话框标题栏中的文本。 label 是显示给用户的文本(它应该说明应该输入什么)。 text 是放置在行编辑中的默认文本。 mode 是行编辑将使用的回显模式。 inputMethodHints 是输入法提示,如果输入法处于活动状态,将在编辑小组件中使用。

若 ok 为非 null *如果用户按 OK,则 ok 将设置为 true,如果用户按 Cancel ,则设置为 false。对话框的父级是父 级。该对话框将是模态的,并使用指定的小部件标志 

如果对话框被接受,此函数将返回对话框行编辑中的文本。如果对话框被拒绝,则 null QString 被返回。

bool QString::isEmpty() const:

如果字符串没有字符则返回true;否则返回false。

实现sexFunc()函数

void Dialog::sexFunc()
{
    bool ok;
    QStringList list;
    list<<"男"<<"女";

    QString strItem=QInputDialog::getItem(this,"标准输入对话框","请选择性别",list,0,false,&ok);

    if(ok && !strItem.isEmpty())
    {
        sexEdit->setText(strItem);
    }
}

QString QInputDialog::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):

静态便利功能,允许用户从字符串列表中选择一个项目。

title 是显示在对话框标题栏中的文本。 label 是显示给用户的文本(它应该说明应该输入什么)。 items 是插入到组合框中的字符串列表。 current 是应为当前项目的项的编号。 inputMethodHints 是输入法提示,如果组合框是可编辑的,并且输入法处于活动状态,则将使用该提示。

若 editable 为 true,用户可以输入自己的文本;否则,用户只能选择现有项目之一。

若 ok 为非 null *如果用户按 OK,则 ok 将设置为 true,如果用户按 Cancel ,则设置为 false。对话框的父级是父 级。该对话框将是模态的,并使用小部件标志 

此函数返回当前项的文本,如果 editable 为 true,则返回组合框的当前文本。

完整代码

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    QGridLayout *gl=new QGridLayout(this);

    noButton=new QPushButton("学号");
    noEdit=new QLineEdit("202154515");

    nameButton=new QPushButton("姓名");
    nameEdit=new QLineEdit("张三");

    sexButton=new QPushButton("性别");
    sexEdit=new QLineEdit("男");

    scoreButton=new QPushButton("分数");
    scoreEdit=new QLineEdit("90");

    gl->addWidget(noButton,0,0);
    gl->addWidget(noEdit,0,1);
    gl->addWidget(nameButton,1,0);
    gl->addWidget(nameEdit,1,1);
    gl->addWidget(sexButton,2,0);
    gl->addWidget(sexEdit,2,1);
    gl->addWidget(scoreButton,3,0);
    gl->addWidget(scoreEdit,3,1);

    connect(noButton,&QPushButton::clicked,this,&Dialog::noFunc);
    connect(sexButton,&QPushButton::clicked,this,&Dialog::sexFunc);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::noFunc()
{
    bool ok;
    QString strText=QInputDialog::getText(this,"标准输入对话框","请输入学号",QLineEdit::Normal,noEdit->text(),&ok);

    if(ok && !strText.isEmpty())
    {
        noEdit->setText(strText);
    }
}

void Dialog::sexFunc()
{
    bool ok;
    QStringList list;
    list<<"男"<<"女";

    QString strItem=QInputDialog::getItem(this,"标准输入对话框","请选择性别",list,0,false,&ok);

    if(ok && !strItem.isEmpty())
    {
        sexEdit->setText(strItem);
    }
}

你可能感兴趣的:(QT,命令模式,qt,开发语言,c++)