Unsolved All MDI windows are active
-
I am getting a weird issue. I have a few MDI windows in QMainWindow and catching windowStateChanged() in one of MDI to show/hide docking widget. Everything works fine here.
But if I try to put one of that window to dock (not adding it to mdiArea()) like this :
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);
then all other MDI windows become persistently active and I can't catch windowStateChanged signal. Converting MDI window to a simple widget does not help as well.
What could be the problem here? Is this a Qt bug?
More detailed info: http://stackoverflow.com/questions/36332562/all-mdi-windows-are-active
-
Hi,
Sounds strange indeed. How are you creating myMDIWindow ?
-
With new myMDIWindow() without parent. In constructor nothing special:
ui->setupUI(this); setWindowTitle("some")
-
I meant how are you creating it your QMainWindow subclass ?
-
: QMainWindow(parent),
ui(new Ui::MyMainWindow),
mWorkspaceBrowser(parent)
{
setWindowFlags(Qt::Widget); // Let QMainWindow act as a common widget here
} -
Where's myMDIWindow ?
-
New info: myMDIWindow with tree widget have signal connected to mdi window which creates it (Let's call it first mdi window). This signal connected to a slot which creates new MDI window according to user double-click in this tree widget. In this case all mdi windows become active. If I create MDI window by clicking a button in first mdi window - all become normal again. Code to create mdi window is the same in both cases:
mdiArea->addSubWindow(newMDI); newMDI->setMainWindow(this); newMDI->show(); newMDI->raise(); mdiArea->setActiveSubWindow(newMDI);
"this" is main window. Could this be dock widget has focus or smth like this on mdi creation?
-
@SGaist said:
Where's myMDIWindow ?
As I said above simple new Widget() without parent created in first mdi window.
-
Can you create a minimal compilable example that shows that behavior ?
-
@SGaist need some time. Probably tomorrow.
-
No problem
-
@SGaist created bug report for now: https://bugreports.qt.io/browse/QTBUG-52287
-
Correct me if I am wrong, are you trying to create an instance QMdiSubWindow and put it on the dock widget?
In this case it loses its relation to QMDiArea and is treated as a regular widget on the dock widget.
So you can't expect QMainWindow windowStateChanged() to be sent.
You may try to watch focus on all such widgets and organize equivalent "active" status for them,
but QMainWindow will not help you here. -
@alex_malyu yes, You are wrong. Read attentively. I'm not trying to catch signal in mdi going to dock, also I tried to convert it to simple widget which was no such signal.