QT 开发 UI 时,在子线程创建界面,主线程处理逻辑,两者之间通过一个消息队列链接的想法是否可取?

2018-11-08 08:57:27 +08:00
 hakono

刚接触 UI 开发没多久,很多东西还不知道 用的 pyqt5,一般创建界面都是在主线程里创建,遇到耗时的任务时开个 QThread 子线程来处理不是吗。

我想要达到分离界面和逻辑的目的,可能我水平次,所以能想到的解决办法就是: 在子线程里创建主界面,主线程里处理逻辑。 然后两者通过一个 Queue 消息队列链接。比如:界面输入完数据后,往 queue 里放一个自定义消息 MSG_BTN_CLICK,然后主线程里通过:

while True:
    event_id , parameter = event_queue.get()
    if event_id == MSG_BTN_CLICK:
    	# 代码逻辑

如果界面要更新界面数据的话,就发送个 MSG_UPDATE_LIST 之类的消息附带上窗口对象,然后主线程丽获取数据后发送个 qt 信号过去更新数据。

不知道这个想法可不可取?谢谢指教!

7864 次点击
所在节点    Python
24 条回复
ysc3839
2018-11-09 01:20:31 +08:00
Windows 也许可以,但不建议这么做。macOS 不行。
印象中 macOS 非主线程或者 fork 出来的子进程不能使用 UI 相关的功能。
zjddp
2018-11-09 09:47:37 +08:00
是 V 和 M 双向绑定的意思吗?
lyc8801
2018-11-09 10:55:58 +08:00
我都是在主线程创建 UI,然后子线程处理逻辑,两者通过信号槽来传递消息...话说 QT 的信号槽真的好用
largecat
2018-11-11 08:19:00 +08:00
主线程跑 UI,子线程跑任务,通过信号槽联系,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/505607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX