我是学生程序员,我正在尝试使用Qt中提供的一些小部件来控制我的用户输入。我希望错误消息显示用户输入的错误,所以我认为使用switch语句是最好的。我可能对此不正确,如果有更好的方法这样做,我全都耳朵!我的主要项目将获得分配用户输入,感觉应该有一个更简单的方法。 Qt文档让我相信QValidator的核心是枚举数据类型。所以我虽然可以在switch语句中使用它但是它似乎不是一个int。我不确定如何在不破坏QValidator的预期方便的情况下引入int值来完成这项工作。
有关如何使这项工作或做得更好的任何信息将不胜感激。提前谢谢。
#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");
}
}
答案 0 :(得分: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:
...
}