Я заметил довольно непонятное поведение QTabWidget. Я пытаюсь отсоединить и повторно подключить вкладки, и это работает нормально, за исключением случаев, когда я программно выбираю виджет после его повторного подключения, все его дети исчезают! Об обновлении() или перерисовке() или о чем-либо, похоже, не появляется. Вы можете выбрать другую вкладку и переустановить вкладку «Сломанные», а виджетов - автоматически.Случай с исчезновением QWidgets
Ниже приведен некоторый (сокращенный) код, отображающий проблему.
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; однако, после повторного подключения, все дети невидимы или что-то сумасшедшее.
Привет, благодарю вас за подсказки, это было очень полезно. В конце концов, ты подведешь меня к решению. Вызов 'setVisible (true)' не имел никакого эффекта; однако я создал таймер для вызова 'show()', и это сработало отлично. 'QTimer :: singleShot (20, wgt, SLOT (show())); // заставить детей снова появляться ' – Zendel