我正在尝试使用 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");
}
}
在这行代码中
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:
...
}