2017-03-15 6 views
1

QListを繰り返し処理し、含まれているオブジェクトのメンバ関数を呼び出す際に問題が発生しています。このウィンドウですべてのプッシュボタンを無効にしようとしています。QListを繰り返し処理し、含まれているオブジェクトの関数を呼び出す

は、ここに私のコード

void TicTacToe::disableGame(){ 
    QList<QPushButton *> allPButtons = findChildren<QPushButton *>(); 
    QList<QPushButton *>::iterator i; 
    for (i = allPButtons.begin(); i != allPButtons.end(); ++i) 
     allPButtons[i]->setEnabled(false); 
} 

ですが、それはコンパイルされません。どのようにiteratorを正しく使用するのですか?

答えて

2

イテレータのポイントは、反復するときにリスト(または他のコンテナオブジェクト)が必要ないということです。あなたは、その内容をどのように歩くかを知っているイテレータと、どこで停止すべきかを知っているイテレータが必要です。

あなたがここに持っている事は、あなたが、ポインタのイテレータを持っているので、あなたは(あなたの人生を容易にするか->)にポインタに*その後、イテレータにoperator*()を呼び出して、しなければならないということです。

ので、あなたはまた、Qtのforeach macroを見ている、またはrange based for loopを使用することができ

(*i)->setEnabled(false); 

を使用する必要があります。彼らはあなたのコードをもっときれいにし、より明確にします。

+0

foreachはとてもうまく機能しました。私はその質問への答えを、さらに詳しい指示の下にお礼を言います。 –

+2

foreachはQtで間もなく廃止される予定であり、forの範囲が進んでいることに注意してください。 – Leherenn

+0

ああ、私はそれを知らなかった。ありがとう。とにかくC++ 11の範囲のループで意味をなさない。 –

関連する問題