QErrorMessage 和 QValidator

问题描述 投票:0回答:1

我正在尝试使用 Qt 中提供的一些小部件来控制我的用户输入。我希望错误消息能够准确显示用户输入的错误,因此我认为使用

switch
语句是最好的。

我的主要项目将获得大量用户输入,感觉应该有一种更简单的方法。 Qt 文档让我相信

QValidator
本质上是一种枚举器数据类型。所以我虽然可以在 switch 语句中使用它,但它似乎并不是一个 int。

我不确定如何引入一个 int 值来完成这项工作,而又不会破坏 QValidator 的预期便利性。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QValidator>
#include <QErrorMessage>
#include <QString>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButtonValidate, SIGNAL(clicked()), this, SLOT(checkData()));
}

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

void MainWindow::checkData()
{
    QValidator *doubleValidator = new QDoubleValidator();
    switch(ui->lineEditValidate->setValidator(doubleValidator))
    {
    case 0:
        QErrorMessage *error0 = new QErrorMessage(this);
        error0->showMessage("The input is invalid");
        break;
    case 1:
        QErrorMessage *error1 = new QErrorMessage(this);
        error1->showMessage("The input is incomplete");
        break;
    case 2:
        break;
    default:
        QErrorMessage *error = new QErrorMessage(this);
        error->showMessage("No input");
    }
}
qt user-interface input
1个回答
2
投票

在这行代码中

switch(ui->lineEditValidate->setValidator(doubleValidator))

您正在尝试打开

setValidator()
函数调用的返回值,该函数返回 void。

据我所知,您似乎想做以下事情:

在构造函数中:

ui->setupUi(this);
connect(ui->pushButtonValidate, SIGNAL(clicked()), this, SLOT(checkData()));
QValidator *doubleValidator = new QDoubleValidator();
ui->lineEditValidate->setValidator(doubleValidator);

并在

checkData()

int pos = 0;
switch(ui->lineEditValidate->validator()->validate(ui->lineEditValidate->text(), pos))
{
case QValidator::Invalid:
...
case QValidator::Incomplete:
...
case QValidator::Invalid:
...
}
© www.soinside.com 2019 - 2024. All rights reserved.