Solved QWidget::windowRole() use as storage for small textual data
-
@mrjj yes, now I also find this looking for parent not working for me strange :)
Just a moment I guess that I'm missing something important... -
@Please_Help_me_D
Yeah as the dumptree clearly shows its the top as we expect
ads::CDockWidget::2D Window
QBoxLayout::
QAction::
QScrollArea::dockWidgetScrollArea
QWidget::qt_scrollarea_viewport
QVTKOpenGLStereoWidget::
QVBoxLayout::
....But the test with qApp->focusWidget(); showd now is the Dock so
looking at this code.f (now != nullptr){
ads::CDockWidget* dockWidget = nullptr;
QObjectList objList = now->children();Do you only check its children ?
and in that case, the line
dockWidget = qobject_castads::CDockWidget*(objList.at(i));will always return null as you skip the now ? and only cast children ?
-
@mrjj let me clarify one moment.
Earlier wrote an unclear post about what widget which dumptree has.
Also there are two possible ways howads::CDockWidget
is attached to the application:- CDockWidget is tabbed
- CDockWidget is float (we can pick and drag it as it is like a new window)
So we have different dumptrees for
QWidget* now
object ononFocusChanged(QWidget* old, QWidget* now)
Here is dumptree for tabbed CDOckWidget:
ads::CDockWidgetTab:: QBoxLayout:: ads::CElidingLabel::dockWidgetTabLabel QPushButton::tabCloseButton
And here is for float CDockWidget:
QScrollArea::dockWidgetScrollArea QWidget::qt_scrollarea_viewport QVTKOpenGLStereoWidget:: QVBoxLayout:: QWindowContainer:: QWidget::qt_scrollarea_hcontainer QScrollBar:: QBoxLayout:: QWidget::qt_scrollarea_vcontainer QScrollBar:: QBoxLayout::
So we have a deal with two types of top level widgets :)
But I would like to set the property only to a single type widget and ifonFocusChanged()
look for that object innow
widget -
@Please_Help_me_D
aha. I missed the being tabbed part.
So when tabbed, the Dock becomes a CDockWidgetTab and the Dock is not around any more? -
@mrjj when tabbed the focused widget is
CDockWidgetTab
(because I do this dumptree on thenow
widget when certain widget is focused). And I don't know exactly whereCDockWidget
disappears :) -
@Please_Help_me_D
Is CDockWidget just a normal QDockWidget ? -
@mrjj here it is
with the code:
void MainWindow::onFocusChanged(QWidget* old, QWidget* now){ if (now != nullptr){ now->dumpObjectTree(); } }
I started interactively change focused window and the qDebug output shows me that the toplevel widget of dumpObjectTree depends upon where I click: if I click on the
QTreeWidget
the this widget is on the rop, if on the label thenCDockWidgetTab
is on the top... -
@Please_Help_me_D
Hi
I think its a custom setup as it dont look the same for Qt exmaples
Is CDockWidget your own class ?
-
-
@Please_Help_me_D
ah. its looks awesome.
Ok so that makes sense. So it will actually hide the dock and the tab
is the parent.
That means setting your value on teh Dock will not work as it not there when tabbed.You could instead add a plain QWidget + layout + qvtkOpenGLStereoWidget/ what you normal put in the dock
so that we always have this QWidget as top and you can add the dynamic property there.
This ofcause adds extra widget to all docks so if you have huge tons of them, it might be wasteful. -
@mrjj said in QWidget::windowRole() use as storage for small textual data:
You could instead add a plain QWidget + layout + qvtkOpenGLStereoWidget/ what you normal put in the dock
so that we always have this QWidget as top and you can add the dynamic property there.
This ofcause adds extra widget to all docks so if you have huge tons of them, it might be wasteful.Could you please explain this a little bit more? Can't understand the idea.
Or we could postpone it till tomorrow it is late night :) -
@Please_Help_me_D
Yes let do it tomorrow as im also tired :)
Its nothing complicated just extra widget with a layout that holds your normal content.
Im assuminng that even CDock will go away, your actual content still exists so if we add a new QWidget that
is always included we could add the property there.