繁琐主要体现在:
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
运行效果:
1
izoabr 2018-10-30 17:12:50 +08:00
好几次想试试 QML,但还是觉得费劲,干脆就还是 designer 直接排了,省事还可视化
|
2
XIVN1987 OP @izoabr
是的,现在看来 Qt Widget 还是要比 Qt Quick 用起来更简单、快捷,,希望 Qt 官方的 Python 绑定能简化 Python 和 QML 的交互 不过 Widget 是给电脑桌面 GUI 设计的,没有考虑手机、平板等设备,,如果想开发手机应用的话可能还是得上 Qt Quick |
3
TangMonk 2018-10-30 17:38:40 +08:00
PyQt 打包方便吗
|
4
XIVN1987 OP |
5
chiu 2018-10-30 17:59:03 +08:00 via Android
@XIVN1987 lz 大佬,请教一下,我用 pyinstaller 打包后的 pyqt 应用在 win 下启动十分缓慢,要 40s 左右,运行倒挺流畅的。是什么参数配置不对吗?
|
9
XIVN1987 OP |
10
chenqh 2018-10-30 20:52:14 +08:00
为什么要这么专业呢?随便写个 UI 就好了。。
|
11
cyrbuzz 2018-10-30 21:07:38 +08:00
感觉最大的硬伤是 QML 没有文档。
|