2016-10-11 5 views
2

私はそれに関連したバリと共にQComboBoxを有する:ウィジェットの値が「受け入れ可能」かどうかをチェックする方法は?

QComboBox* cb = new QComboBox; 
// ... 
cb->setValidator(new QDoubleValidator(0.0, 100.0, 2, this)); 

このウィジェットは、入力された値が変更されたときに実行されますスロット(currentTextChanged())に接続されています。この構成で

connect(cb, SIGNAL(currentTextChanged(QString)), 
     this, SLOT(onTextChanged(QString))); 

バリがAcceptable又はIntermediateを返す場合、onTextChanged()が実行されます。入力した値が実際に有効な場合にのみ、スロットを実行するにはどうすればよいですか(Acceptable)。または、onTextChanged()スロットの検証状態を確認するにはどうすればよいですか? (奇妙なことに、私はcb->validator()はいつもnullptrを返すように見えることに気づいた。)

+0

"私は気付いています。 msは常にnullptr "leまたはcbを返しますか?バリデータポインタをメンバ変数に保持することもできます。 –

+0

@FrankOsterfeld質問が修正されました。 – mimo

+0

'QDoubleValidator'の親を' this'ではなく 'QComboBox cb'に設定してみてください。 – RedX

答えて

1

があなたのコンボボックスに新しいバリデータを添付:では

connect(cb, SIGNAL(currentTextChanged(QString)), 
     this, SLOT(onTextChanged(QString))); 

QComboBox* cb = new QComboBox; 
QDoubleValidator* validator = new QDoubleValidator(0.0, 100.0, 2, this); 
cb->setValidator(validator); 

あなたのシグナル/スロットを接続します現在のテキストが有効かどうかを確認することから始めます:

int pos = cb->currentIndex(); 
const QDoubleValidator* validator = qobject_cast<const QDoubleValidator*>(cb->validator()); 
QValidator::State state = validator->validate(txt, pos); 
if (state != QValidator::Acceptable) 
    return; 
+0

'' QComboBox''インスタンスからバリデータにアクセスする方法はありませんか? – mimo

+0

はい、http://doc.qt.io/qt-4.8/qcombobox.html#validator最後の変更を参照してください – mohabouje

+0

しかし、質問で言及したように、 '' validator() ''は私にヌルポインタを返します。実際には、スロット内だけでなく、 '' cb-> setValidator(new QDoubleValidator(0.0、100.0、2、this)); ''でバリデーターを設定した直後にチェックします。 – mimo

関連する問題