消失的QWidgets的情况

时间:2013-09-14 20:02:57

标签: qt qt5 qtabwidget

我注意到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事件。事件过滤器工作正常,拾取事件,并将窗口小部件重新连接到tab_widget;然而,在重新连接之后,所有的孩子都是看不见的或类似的东西。

1 个答案:

答案 0 :(得分:0)

你试过adjustSize()吗?如果由于某种原因它没有计算新的大小,并尝试正确删除对象,则会发生这种情况。执行resize()也会做类似的事情。

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

希望有所帮助。

相关问题