QErrorMessage和QValidator

时间:2012-01-03 17:17:50

标签: qt user-interface input connect

我是学生程序员,我正在尝试使用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");
    }
}

1 个答案:

答案 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:
...
}