2018-03-02 16:26 GMT+01:00 Martins, Sérgio <sergio.mart...@kdab.com>: > On 2018-03-02 15:21, Elvis Stansvik wrote: >> >> 2018-03-02 16:18 GMT+01:00 Elvis Stansvik <elvst...@gmail.com>: >>> >>> 2018-03-02 15:54 GMT+01:00 Nikos Chantziaras <rea...@gmail.com>: >>>> >>>> On 02/03/18 16:37, Elvis Stansvik wrote: >>>>> >>>>> >>>>> [...] >>>>> How can I (as application developer) get notified of screen changes of >>>>> non-QWindow-backed widgets? >>>> >>>> >>>> >>>> There seems to be two ways to do this. One is using one of the QScreen >>>> signals: >>>> >>>> http://doc.qt.io/qt-5/qscreen.html >>> >>> >>> Hm, I should have made my question more clear. >>> >>> The typical way I've seen is to connect to the screenChanged signal of >>> the closest ancestral QWindow (window()->windowHandle()). >>> >>> But, I've found that it's not reliable for certain widgets/certain >>> platforms to do e.g: >>> >>> QTimer::singleShot(0, [this]() { >>> connect(window()->windowHandle(), &QWindow::screenChanged, >>> this, &MyWidget::handleScreenChanged); >>> }); >>> >>> in my constructor, because depending on how the widget is constructed, >>> the parentage up to a top-level window may not have been established >>> yet, even if I do it in a single-shot timer like this. >> >> >> I should clarify this: What I mean is that I've seen situations when >> window()->windowHandle() is 0 here, even if the widget is constructed >> with a full parentage up to a top-level widget. > > > Hi, > > Call QWidget::create() on your top-level constructor, and it will ensure it > it has a QWindow
Thanks, that's one way of doing it, but reading further, it seems QWidget delays doing this for a reason. E.g. see the docs for Qt::AA_ImmediateWidgetCreation, which I could also use to tell Qt to call create(..) immediately during construction. That attribute is due to be removed in Qt 6 though. I don't think I like the idea of jumping the gun on QWidget here and calling create(..) myself. Surely there must be some way to reliably know when a widget is moved to another screen (or anoter top-level window), short of hooking up to internal events? Elvis > > > Regards, > -- > Sérgio Martins | sergio.mart...@kdab.com | Senior Software Engineer > Klarälvdalens Datakonsult AB, a KDAB Group company > Tel: Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322) > KDAB - The Qt, C++ and OpenGL Experts _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest