私がQTにかなり慣れていないことがわかるかもしれません...
私のプログラムには、QGridLayout に複数のウィジェットを含むウィンドウが含まれています。これらのウィジェットの一部には、レイアウトと子ウィジェット自体があります。Tab キーを押すと、ウィジェットを作成した順序で、期待どおりにフォーカスが移動します。
ウィジェットのコンテンツが変更されると問題が発生します (すべての子ウィジェットを削除してから新しいウィジェットを作成することでこれを行います)。そうすると、新しいウィジェットはタブ チェーンの最後に移動します (これは、タブ オーダーがウィンドウの一種のグローバル)。QWidget::setTabOrder() を使用してすべてのウィジェットを並べ替えようとしました (メイン ウィンドウのコンテンドのみにタブ オーダーを設定し、子にもタブ オーダーを設定して、両方を試しました) が、実際の順序は変わりません。これは、ウィジェットの競合が変化したときにシグナルを発し、それをメイン ウィンドウのスロットに接続することで実現しました。setTabOrder() 関数が機能する方法を理解していると思います。私はこれに似たようなことをします:
QWidget* a = firstWidget;
QWidget* b = secondWidget;
QWidget::setTabOrder(a,b);
for (int i = 0; i < widgets.size(); ++i) {
a = b;
b = widgets[i];
QWidget::setTabOrder(a,b);
}
タブ オーダーを変更するときに何か特別なことはありますか?
また、このサイトにあるものと同様の focusNextPrevChild(bool next) および focusInEvent(QFocusEvent* e) を再実装しようとしました。1
私はこのようにタブオーダーをもっと台無しにすることができました...このアプローチは正しい方向への一歩ですか?
これが私が見逃した単純なものである場合は申し訳ありませんが、しばらく苦労しており、解決策が見つかりません. どんな助けでも大歓迎です。