2017-03-07 5 views
0

特定のレイアウトのすべてのQPushButtonを取得する方法を知りたいと思います。ここで特定のレイアウトのすべてのQPushButtonを取得する方法

は私のコードです(動作しない)

QList<QPushButton *> step2PButtons = findChildren<QPushButton *>(step2Layout); 
for (auto *button: step2PButtons) 
    button->setEnabled(false); 

私は次のようなエラーがあります。

no matching function for call to 'MainWindow::findChildren(QVBoxLayout*&)' 

を、私は私のインターフェイスのすべての要素を取得することができますが、私はの要素を取得することはできません特定のレイアウト。これはどのように

+0

正確に 'step2Layout'のタイプは何ですか? –

+0

QVBoxLayout – iAmoric

+1

これはポインタですか? –

答えて

0

を支援するための

ありがとう:私はstep2Layoutを推測している

QList<QPushButton*> step2PButtons = step2Layout->findChildren<QPushButton*>(); 
for(auto it = step2PButtons.begin(); it != step2PButtons.end(); ++it) 
    (*it)->setEnabled(false); 

QVBoxLayoutオブジェクトへのポインタです。

QObjectのメンバ関数です。step2Layoutは、から派生したものです。あなたはQMainWindowから呼び出しているので、すべてのウィンドウボタンが表示されます。

+0

私の投稿を編集したエラー – iAmoric

+0

あなたの解決策に間違いはありませんが、ボタンは無効になっていません.. – iAmoric

+0

@ LucasPierratこれはどうですか? –

0

Quantum Physicistの答えは正しいですが、小さな詳細が欠落しています。Qt Designerでレイアウトを作成すると、生成されたコードを見るとレイアウトの親である「隠し」QWidgetが作成されます。

QWidget *verticalLayoutWidget; 
QVBoxLayout *verticalLayout; 
[...] 
verticalLayoutWidget = new QWidget(centralWidget); 

次に、レイアウトの子と思われるボタンは、実際にはこの隠れたウィジェットの子ではありません。

pushButton = new QPushButton(verticalLayoutWidget); 

あなたはstep2Layout->parentWidget()->findChildren<QPushButton*>();step2Layout->findChildren<QPushButton*>();を交換する場合は、あなたのレイアウトであり、ループ内でそれらを処理することができ、ボタンを取得する必要があります。

関連する問題