2

QTabWidget の不可解な動作に気付きました。タブをデタッチして再アタッチしようとしていますが、ウィジェットを再アタッチした後にプログラムで選択した場合を除いて、正常に動作します。そのすべての子が消えます! update() や repaint() など、ウィジェットを再表示するように思われるものはありません。別のタブを選択して「壊れた」タブを再度選択すると、子ウィジェットが自動的に再び表示されます。

以下は、問題を表示する (短縮された) コードです。

void MainWindow::test()
{
    auto tab_widget = pimpl->tab_widget;
    auto sz = tab_widget->size();

    auto wgt = tab_widget->currentWidget();
    auto tab_text = tab_widget->tabText(tab_widget->currentIndex());
    if(wgt == nullptr)
    return;


    wgt->installEventFilter(new GenericQEventFilter(wgt, 
        [=] (QObject *obj, QEvent *event) {
            if(event->type() == QEvent::Close) {
                printf("Close Event!!!\n");
                tab_widget->addTab(wgt, tab_text);
                tab_widget->setCurrentWidget(wgt);
                // wgt's children are temporarily invisible
                wgt->setUpdatesEnabled(true);
                wgt->repaint();
                wgt->update();
                qApp->processEvents(); //NOTHING WORKS!!!
                return true;
             }
            return false;
        }));
    tab_widget->removeTab(tab_widget->currentIndex());
    wgt->setParent(nullptr);
    wgt->setVisible(true);
    wgt->raise();
    wgt->setFocus();
}

したがって、明確にするために、onClose イベントを取得するために、切り離されたウィジェットに event-fitler をアタッチしています。イベント フィルターは正常に機能し、イベントを取得して、ウィジェットを tab_widget に再接続します。ただし、再接続すると、すべての子供が見えなくなるか、そのようなクレイジーなものになります。

4

1 に答える 1

0

試しましたadjustSize()か?これは、何らかの理由で新しいサイズが計算されず、オブジェクトを正しくドロップしようとした場合に発生します。aresize()を実行すると、同様のこともできます。

http://qt-project.org/doc/qt-5.1/qtwidgets/qwidget.html#adjustSize

また、子が欠落していると思われるものを試しqDebug() << wgt->dumpObjectTree();てください。QObjectこれにより、子育ての変更と関係があるかどうかがわかります。

http://qt-project.org/doc/qt-5.1/qtcore/qobject.html#children

http://qt-project.org/doc/qt-5.1/qtdoc/debug.html

http://qt-project.org/doc/qt-5.1/qtcore/qobject.html#dumpObjectTree

http://qt-project.org/doc/qt-5.1/qtcore/qdebug.html#details

そして、それらが配置されているが考慮されhidden、ショーイベントが伝播されなかった可能性もあります. show()したがって、これを確認するために明示的に呼び出すことができます。

http://qt-project.org/doc/qt-5.1/qtwidgets/qwidget.html#visible-prop

http://qt-project.org/doc/qt-5.1/qtwidgets/qwidget.html#show

QTabWidgetそして、私がすぐには考えていないの他の特性があるかもしれません。このリストに目を通して、関連する可能性のあるものが他にあるかどうかを確認してください。

http://qt-project.org/doc/qt-5.1/qtwidgets/qtabwidget-members.html

それが役立つことを願っています。

于 2013-09-15T04:45:40.103 に答える