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
-
@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 usingQQmlApplicationEngine
. So there are 2 windows here. May be that could be the problem ?
Instead ofQQmlApplicationEngine
you can useQQuickWidget
so that the QML type gets embedded into the widget.QQuickWidget
requires root element to be of typeItem
.