2012-01-03 1 views
2

私は学生プログラマーで、私は自分のユーザ入力を制御するためにQtで提供されているウィジェットのいくつかを使用しようとしています。私はエラーメッセージが正確に何が間違ってユーザーの入力を表示するので、私はスイッチのステートメントを使用することが最適だろうと思った。私はこれについて正しくないかもしれません、そして、これを行う良い方法があるなら、私はすべての耳です!私の主なプロジェクトはユーザーの入力を得ることになり、より簡単な方法があるように感じます。 Qtドキュメントは、QValidatorが列挙子のデータ型であると考えてくれました。だから私はスイッチのステートメントでそれを使用することはできますが、intとして出てくるようではありません。 QValidatorの意図した利便性を犠牲にすることなく、この作業を行うためにint値をどのように持ち込むかはわかりません。QErrorMessageとQValidator

どのようにこの仕事をするか、それをより良くするための情報があれば幸いです。前もって感謝します。コード

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

のこの行で

#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"); 
    } 
} 

答えて

2

あなたはvoidを返すsetValidator()関数呼び出しの戻り値に切り替えるようにしようとしています。コンストラクタで

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: 
... 
} 
+0

で、私はあなたがふてくされていると思いますが、これらの線に沿って何かをやりたいように私が集まるものと

は、それが見えますここに正しいトラックで私を得たが、私はスイッチの文章のためのcomplier問題を取得しています: QValidator :: validate(QString)の呼び出しのための一致する関数はありません 候補は: virtual QValidator :: State QValidator :: validate(QString&、int&)const 候補は2つの引数を期待しており、1つだけが提供されているとしています。 私はこれを検討していましたが、ドキュメントには何をすべきかについては明確ではありません。何か案は?私はそれ以外のバリデーションパラメータで何が必要なのかわかりません。私は親またはこれを考えていたが、どちらも機能で動作しませんでした。私は同じコンパイルエラーを取得します。 –

+0

私はこのステートメントをより正確に編集しました。 [Qtのドキュメント](http://developer.qt.nokia.com/doc/qt-4.8/)を読んで実際に何が起こっているのかを実際に理解することに頼ることを本当に学ぶ必要があるでしょう – Chris

+0

;あなたの権利、QTのドキュメントは私が苦労してきたものです。それは上り坂だったが、病気はそこに着く。ご協力いただきありがとうございます! –