我发现许多回答说从另一个线程访问Qt Gui Widgets是不安全的。如果我们尝试修改小部件,我同意这一点。但是,如果我只读取小部件的值而不做任何修改怎么办?
我使用Qt设计了一个GUI工具,我的工作线程直接读取Widget,例如,获取QLineEdit的文本,获取QComboBox的值等。而且我没发现任何问题。
我将MainWindow的指针传递给工作线程。
这真的不安全吗?
答案 0 :(得分:4)
首先:从另一个线程读取属性而不保护内存(Mutex,Signal & Slot)总是一个坏主意。
您的情况:如果什么都不想更改值,则应该没问题。如果每个线程仅读取该值,则没有问题。但是,如果您通过单击向上箭头,向下箭头或选择新项目(例如,我希望得到的结果)来更改QComboBox的值(例如)您会这样做,因为那是使用QComboBox的原因,该值将被写入,如果您的工作线程想要在同一时刻读取该值,则应用程序会崩溃(产生毛刺的可能性取决于您的线程提取信息的频率。
您的应用程序从未崩溃,因为该条件从未出现。 但这并不意味着这不可能发生。