2014-09-19 4 views
4

j'ai écrit monde simple bonjour en utilisant pyqt5.But quand je commence j'obtenir l'erreur:QQuickView ne prend en charge que le chargement des objets racine qui dérivent de l'erreur QQuickItem?

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. 

J'ai essayé de le résoudre, mais je suppose que je ne comprends pas ce que quelqu'un me happend.Can expliquer cette erreur plus détails et comment puis-je le résoudre?

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() 

         } 



      } 



} 
+0

je cherche aide pour exactement le même problème depuis longtemps déjà, mais rien trouvé, jusqu'à présent. –

Répondre

8

Le message d'erreur est tout à fait clair: ApplicationWindow est pas un QQuickItem, et donc vous ne pouvez pas utiliser QQuickView pour le charger .

La raison pour cela est que ApplicationWindow et QQuickView sont en conflit, car ils héritent tous deux de QQuickWindow. Pour charger un ApplicationWindow, vous devez utiliser un 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() 
+1

Ok merci beaucoup –

+1

Je souhaite que je pourrais upvote encore ;-) –

+0

Réponse pour C++: [ici] (https://stackoverflow.com/questions/18506784/qml-and-c-with-qt-quick-2- application) –

Questions connexes