Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QWidgets消失的案例_Qt_Qt5_Qtabwidget - Fatal编程技术网

Qt QWidgets消失的案例

Qt QWidgets消失的案例,qt,qt5,qtabwidget,Qt,Qt5,Qtabwidget,我注意到QTabWidget中有一些相当难以理解的行为。我正在尝试分离和重新连接选项卡,这很好,除非在重新连接一个小部件后以编程方式选择它,否则它的所有子部件都会消失!没有关于update()或repaint()或任何使小部件重新出现的内容。您可以选择一个不同的选项卡,然后重新选择“断开”选项卡,子窗口小部件将再次自动显示 下面是显示问题的一些(缩短的)代码 void MainWindow::test() { auto tab_widget = pimpl->tab_widget;

我注意到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_小部件;但是,在重新连接后,所有的孩子都看不见或像那样疯狂。

您是否尝试过
adjustSize()
?如果出于某种原因,它没有计算新的大小,并尝试正确地放入对象,则会发生这种情况。执行
resize()
也会执行类似的操作

还可以尝试
qDebug()dumpObjectTree()QObject
上执行code>。这会让你知道这是否与养育方式的改变有关

还有一种可能性是,它们已经就位,但被认为是隐藏的,并且一个表演活动没有向下传播。因此,您可以显式地调用
show()
来检查这一点

可能还有
QTabWidget
的一些其他属性,我没有马上想到。查看此列表,看看是否还有其他可能相关的内容


希望能有所帮助。

嗨,谢谢你的提示,这非常有帮助。你最终给了我一个解决方案。调用
setVisible(true)
无效;但是,我创建了一个计时器来调用
show()
,这非常有效<代码>QTimer::单发(20,wgt,插槽(show());//强制子项重新出现