繁琐主要体现在:
1、Python 中不能使用 QML 中的 id 查找控件,需要用 objectName,,一般这两者值是完全一样的,重复劳动
ComboBox {
id: cmbPort
objectName: "cmbPort"
Layout.minimumWidth: 100 * 2 + 10 * 2 + lblSer.width
model: ports
}
2、pyqtProperty 不太好用,,搞了好久没用起来,放弃了
3、Python 中无法直接使用 QML 中的控件,必须用 findObject 在 Python 中再定义一遍
self.cmbPort = self.win.findChild(QObject, 'cmbPort')
self.cmbBaud = self.win.findChild(QObject, 'cmbBaud')
self.cmbData = self.win.findChild(QObject, 'cmbData')
self.cmbParity = self.win.findChild(QObject, 'cmbParity')
self.cmbStop = self.win.findChild(QObject, 'cmbStop')
self.txtMain = self.win.findChild(QObject, 'txtMain')
self.txtSend = self.win.findChild(QObject, 'txtSend')
self.chkRHex = self.win.findChild(QObject, 'chkRHex')
self.chkWave = self.win.findChild(QObject, 'chkWave')
self.chkTHex = self.win.findChild(QObject, 'chkTHex')
self.chkLine = self.win.findChild(QObject, 'chkLine')
self.chkTime = self.win.findChild(QObject, 'chkTime')
self.btnOpen = self.win.findChild(QObject, 'btnOpen')
4、Python 中不能直接访问 QML 控件的属性,而需要用 property、setProperty 间接访问
比如 CombBox 控件有 currentText 属性,不能用 self.cmbPort.currentText 访问,而必须用 self.cmbPort.property('currentText')访问
5、文档资料很少,,没有应用示例
代码在此:https://github.com/XIVN1987/QmlSer
运行效果:
