从另一个线程读取Qt小部件可以吗?

时间:2018-10-30 06:53:45

标签: multithreading qt

我发现许多回答说从另一个线程访问Qt Gui Widgets是不安全的。如果我们尝试修改小部件,我同意这一点。但是,如果我只读取小部件的值而不做任何修改怎么办? 我使用Qt设计了一个GUI工具,我的工作线程直接读取Widget,例如,获取QLineEdit的文本,获取QComboBox的值等。而且我没发现任何问题。
我将MainWindow的指针传递给工作线程。 这真的不安全吗?

1 个答案:

答案 0 :(得分:4)

首先:从另一个线程读取属性而不保护内存(MutexSignal & Slot)总是一个坏主意。

您的情况:如果什么都不想更改值,则应该没问题。如果每个线程仅读取该值,则没有问题。但是,如果您通过单击向上箭头向下箭头选择新项目(例如,我希望得到的结果)来更改QComboBox的值(例如)您会这​​样做,因为那是使用QComboBox的原因,该值将被写入,如果您的工作线程想要在同一时刻读取该值,则应用程序崩溃(产生毛刺的可能性取决于您的线程提取信息的频率。

您的应用程序从未崩溃,因为该条件从未出现。 但这并不意味着这不可能发生。