#方式一
class Speaker(Qobject):
@Property(int)
def pp(self):
return self.ppval
@pp.setter
def pp(self, val):
self.ppval = val
print(val)
#取值 s.pp = 10, print(s.pp)
#-------------------------------------------------
#方式二
class Speaker(QObject):
def pp(self):
return self.ppval
@Signal
def pp_changed(self):
pass
def setPP(self, val):
self.ppval = val
self.pp_changed.emit()
print("---",val)
name = Property(int, pp, setPP, notify=pp_changed)
mList = Property(list....) # 使用 list 传递列表
## QML
Text {
id: name
text: speaker.tt
}
信号与槽 在 python 定义,在 QML 实例化
#定义槽
@Slot(int)
def val(self, s):
print("vv:",s)
#定义信号,(注意: 信号必须定义在 class 下)
class TestSignal(QObject):
test = Signal(int)
#连接信息
tt = TestSignal()
tt.test.connect(val)
tt.test.disconnect(val)
#发送信号
tt.test.emit(1)
####################################
#老版本实现方式:与 CPP 方式类似
## python
from PySide6.QtCore import QEnum, QSlot, QObject, QEnum
from enum import Enum
class Speaker(QObject):
@QEnum
class Orientation(Enum):
North, East, South, West = range(4)
@Slot(float, result=int)
def val(self, s):
print("---------d",s)
qmlRegisterType(Speaker, "io.qt.textproperties", 1, 0, "Speaker")
## QML
import io.qt.textproperties
Speaker {
## 调用枚举
Component.onCompleted: {
console.log(Speaker.East)
}
}
#新版本实现方式
QML_import_NAME = "com.library.name"
QML_import_MAJOR_VERSION = 1
QML_import_MINOR_VERSION = 0 # Optional
@QmlElement
class Speaker(QObject):
@Slot(float, result=int)
def val(self, s):
print("val:", s*3.1)
import com.library.name
ClassForQml {
// ...
}
直接传递 (通过 context 传递)
# 与 CPP 类似
@QmlElement
class Speaker(QObject):
@Slot(float, result=int)
def val(self, s):
print("val", s * 3.1)
x = Speaker()
engine.rootContext().setContextProperty('ddd', x)
# QML
ddd.val(10)



