2015-06-02 2 views
0

Сначала я начал проект в Qt Creator с C++-бэкэнд, но затем переключил его на использование PyQt5. У меня есть main.qml, где, когда я нажимаю кнопку под названием Exit, я звоню Qt.quit().Как закрыть программу Pyqt5 из QML?

Однако я получаю General Message заявление: Signal QQmlEngine::quit() emitted, but no receivers connected to handle it.

Мой вопрос, как я могу получить этот сигнал и обрабатывать его?

Код:

main.py:

import sys 
import PyQt5 

from PyQt5 import QtCore 
from PyQt5 import QtGui 
from PyQt5 import QtQml 
from PyQt5.QtCore import QObject pyqtSignal 


class DestinyManager,(QtGui.QGuiApplication): 
    """the app self""" 
    def __init__(self, argv): 
     super(DestinyManager, self).__init__(argv) 

    # Define a new signal called 'trigger' that has no arguments. 
    trigger = pyqtSignal() 

    def connect_and_emit_trigger(self): 
     # Connect the trigger signal to a slot. 
     self.trigger.connect(self.handle_trigger) 
     self.menuItem_Exit.clicked.connect(self.close) 
     # Emit the signal. 
     self.trigger.emit() 

    def handle_trigger(self): 
     # Show that the slot has been called. 
     print("trigger signal received") 

def main(argv): 
    app = DestinyManager(sys.argv) 
    engine = QtQml.QQmlEngine(app) 
    component = QtQml.QQmlComponent(engine) 
    component.loadUrl(QtCore.QUrl("exit.qml")) 
    topLevel = component.create() 
    if topLevel is not None: 
     topLevel.show() 
    else: 
     for err in component.errors(): 
      print(err.toString()) 
    app.exec() 

if __name__ == '__main__': 
    QObject,main(sys.argv) 

Exit.qml:

import QtQuick 2.4 
import QtQuick.Controls 1.3 
import QtQuick.Window 2.2 

Window { 

    Button { 
    id: btn_Exit 
    text: "Exit" 

    onClicked: Qt.quit(); 

    } 
} 
+0

Пожалуйста, не отправляйте код в виде ссылок - поместите соответствующие части в вопрос непосредственно. – ekhumoro

+0

Извините. Я обновил вопрос, чтобы включить код. Если вы попробуете, python может дать некоторые ошибки интервала, но код действительно работает. –

ответ

1

Есть несколько синтаксических ошибок в сценарии питона, но игнорируя тех, код может должны быть созданы следующим образом:

def main(argv): 
     app = DestinyManager(sys.argv) 
     engine = QtQml.QQmlEngine(app) 
     engine.quit.connect(app.quit) 
     ... 

То есть вам просто нужно подключить сигнал qml quit к соответствующему слоту в вашем скрипте python.

Смежные вопросы