首页  > c罗世界杯表现 > qt - QWidgets消失的案例

qt - QWidgets消失的案例

c罗世界杯表现 2025-08-15 13:53:30 560

我注意到来自 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;但是,重新连接后,所有的孩子都是隐形的或类似的疯狂。


友情链接:
Copyright © 2015 冲击世界杯_2002韩日世界杯 - 0534pos.com All Rights Reserved.