QT-QML application: QQuickWindow to Full Screen: repaint failure ("bad window" in top-left screen corner)



  • I have a Qt/QML application and I have a problem when setting the main window to Full Screen.

    It goes Full Screen, but first it seems to be moved to the top-left corner of my screen. Then it changes to Full Screen, BUT this top-left window is there until I repaint my application. For instance, moving it to background and to foreground again.

    I hope I am explaining properly...

    In my code, I have a QWidget class where I create a QQmlApplicationEngine:

    .h file:

    QQmlApplicationEngine* m_pAppMainWindow;
    QQuickWindow* m_pQuickWindow;
    

    .cpp file:

    m_pAppMainWindow = new QQmlApplicationEngine();
    

    I use it to get app qml context

    QQmlContext* pQmlContext = m_pAppMainWindow->rootContext();
    

    to load the main QML file from resources:

    m_pAppMainWindow->load(QUrl("qrc:/qml/ViewMain.qml"));
    

    to set Image providers:

    m_pAppMainWindow->addImageProvider(...);
    

    and to get QQuickWindow object:

    m_pQuickWindow = m_pQuickWindow = qobject_cast<QQuickWindow *>(m_pAppMainWindow->rootObjects()[0]);
    

    I use the QQuickWindow object to set app window minimum size:

    m_pQuickWindow->setMinimumWidth(...)
    

    to get the QML objects to work with:

    QObject* pObjViewMain = m_pQuickWindow->findChild<QObject*>("viewMain");
    

    and to set app in full screen mode (on/off):

    m_pQuickWindow->showFullScreen();
    or 
    m_pQuickWindow->showNormal();
    

    My problem is with this last point, when I enter Full Screen...

    Hope anyone can help me

    Thanks


  • Moderators

    @Diego-Donate
    Not sure but as I understand from the description you are first creating the widget and then from there trying to load the QML using QQmlApplicationEngine. So there are 2 windows here. May be that could be the problem ?
    Instead of QQmlApplicationEngine you can use QQuickWidget so that the QML type gets embedded into the widget. QQuickWidget requires root element to be of type Item.



  • @p3c0 Thanks for your help, I will try your option, I hope I could use QQuickWidget instead of QQmlApplicationEngine with no problem or unexpected effect.