Натолкнулся на странный баг. У меня есть несколько MDI окон в
QMainWindow. В одном из них я перехватываю сигнал
windowStateChanged() для того, чтобы показать/спрятать прикреплённый виджет (docking widget). Всё работает прекрасно. Однако, если я пытаюсь поместить одно из этих окон в док (не добавляя его при этом в
mdiArea()),
C++ (Qt)
myMDIWindow->setWindowFlags(Qt::Widget | Qt::CustomizeWindowHint |
Qt::FramelessWindowHint);
// Create dock window and put my mdi window into it
QDockWidget *dock = new QDockWidget(myMDIWindow->windowTitle(), this);
dock->setFloating(true);
dock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::RightDockWidgetArea);
dock->setWidget(myMDIWindow); // Wrap mdi window into dock
mainWindow()->addDockWidget(Qt::RightDockWidgetArea, dock);
тогда все другие MDI окна становятся активными постоянно, и я не могу перехватить сигнал
windowStateChanged. Преобразование этого MDI окна в простой QWidget также не помогает. В чём может быть причина? Баг Qt?
Новая информация: myMDIWindow содержит tree widget и по двойному нажатию на нём эмитирует сигнал, подключённый к mdi окну, которое создало его (назовём его 1-е mdi окно). Этот сигнал подсоединён к слоту, который создаёт новое MDI окно, в зависимости от того, куда пользователь кликнет в списке tree widget. В этом случае все mdi окна становятся активными. Если же создать MDI окно нажатием кнопки в 1-м mdi окне - всё опять приходит в норму. Код создания mdi окна один и тот же в обоих случаях:
C++ (Qt)
mdiArea->addSubWindow(newMDI);
newMDI->setMainWindow(this);
newMDI->show();
newMDI->raise();
mdiArea->setActiveSubWindow(newMDI);
"this" -это main window. Может быть причина в том, что dock widget имеет фокус или что-то в этом роде во время создания mdi окна?
Ещё: если отцепить окно с tree widget от дока - всё опять работает нормально.