小编典典
您的问题涉及很多方面,因此我将尝试在其答案中进行详细说明,并且此答案将不断更新,因为此类问题经常被问到,但它们是针对特定情况的解决方案,因此,我将自由给出一种通用方法,并在可能的情况下具体说明。
QML到Python:
您的方法之所以有效,是因为python中的类型转换是动态的,而在C
++中则不会发生。它适用于小型任务,但不可维护,逻辑必须与视图分离,因此不应依赖于逻辑。具体来说,假设打印的文本将由逻辑执行一些处理,然后,如果您修改信号的名称,或者如果数据不依赖ApplicationWindow于另一个元素,等等,那么您将拥有更改很多连接代码。
所建议的建议是创建一个类,该类负责映射所需逻辑的数据并将其嵌入QML,因此,如果在视图中进行了某些更改,则只需更改连接即可:
例:
main.py
import sys
from PySide2.QtCore import QObject, Signal, Property, QUrl
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
class Backend(QObject):
textChanged = Signal(str)
def __init__(self, parent=None):
QObject.__init__(self, parent)