web-dev-qa-db-ja.com

Qtでウィジェットの子をどのように取得しますか?

QtのKeyPress関数を使用して、アプリケーションに対するkeyPressesをシミュレートしています。すべてのKeyPressが正常に機能します。ただし、QT::Key_Enter現在アクティブなウィンドウのOKボタンを押すことになっている、またはQT::Key_Cancelキャンセルボタンの場合、何もしません。

これらのボタンにはフォーカスがなく、親ウィンドウ自体にもフォーカスがあるため、私は多分考えています。ウィンドウの子をどのように取得しますか?または、その上に[OK]または[キャンセル]ボタンを見つけて、それをactiveWindowとして設定し、KeyPressを正常に渡すことができますか?

私が持っています:

QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?
25
Owen

findChild 関数をオブジェクト名と共に使用して、特定の子を取得できます。 findChildrenを使用すると、同じ名前のすべての子を取得し、foreachまたは QListIterator を使用してリストを反復処理できます。

あなたが試すことができるボタンを取得するには:

QPushButton* button = pWin->findChild<QPushButton*>("Button name");
55

ウィジェットにカスタムの イベントフィルター を配置して、キーイベントをキャプチャし、実際に何が起こるかを確認することができます。

2
teukkam