QQuickView only supports loading root objects that come from a QQuickItem error?

I wrote a simple hello world using pyqt5. But when I start, I get the error:

QQuickView only supports loading of root objects that derive from QQuickItem. 

If your example is using QML 2, (such as qmlscene) and the .qml file you 
loaded has 'import QtQuick 1.0' or 'import Qt 4.7', this error will occur. 

To load files with 'import QtQuick 1.0' or 'import Qt 4.7', use the 
QDeclarativeView class in the Qt Quick 1 module.

I tried to solve this problem, but I think I do not understand what is happening. Can someone explain this error to me in more detail and how to solve it?

Main.py:

#!/usr/bin/python3.4


from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.Qt import *
from PyQt5.QtQuick import * 

if __name__=='__main__':
    import os
    import sys


class Main(QObject):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.view=QQuickView()
        self.view.setSource(QUrl.fromLocalFile('main.qml'))
    def show(self):
        self.view.show()



app=QApplication(sys.argv)
main=Main()
main.show()
sys.exit(app.exec_())

Main.qml

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.0



ApplicationWindow
{
    signal btnPlayClicked()
    signal btnStopClicked()



    id:app
    width:Screen.desktopAvailableWidth
    height:Screen.desktopAvailableHeight
    color:"black"


    ToolBar{
            y:app.height-height
            height:btnPlay.height
                Button
                        {
                               id:btnPlay
                               x:app.width/2-btnPlay.width
                               text:"Play"
                               onClicked: parent.parent.btnPlayClicked()

                        }
                Button
                       {
                               id:btnStop
                               x:app.width/2
                               text:"Stop"
                               onClicked: parent.parent.btnStopClicked()

                       }



          }



}
+4
source share
1 answer

The error message is clear enough: ApplicationWindow is not a QQuickItem, so you cannot use QQuickView to load it.

, ApplicationWindow QQuickView , QQuickWindow. ApplicationWindow, QQmlApplicationEngine:

class Main(QObject):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.engine = QQmlApplicationEngine(self)
        self.engine.load(QUrl.fromLocalFile('main.qml'))
        self.window = self.engine.rootObjects()[0]

    def show(self):
        self.window.show()
+8

All Articles