Russian Qt Forum
Сентябрь 30, 2024, 02:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Все MDI окна активны  (Прочитано 1680 раз)
AlekseyK
Гость
« : Март 31, 2016, 15:22 »

Натолкнулся на странный баг.  У меня есть несколько 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 от дока - всё опять работает нормально.
« Последнее редактирование: Апрель 01, 2016, 10:13 от AlekseyK » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.144 секунд. Запросов: 21.