我发现许多回答说从另一个线程访问Qt Gui Widgets是不安全的。如果我们尝试修改小部件,我同意这一点。但是,如果我只读取小部件的值而不进行任何修改,该怎么办?
我使用Qt设计了一个GUI工具,我的工作线程直接读取Widget,例如,获取QLineEdit的文本,获取QComboBox的值等。而且我还没有发现任何问题。
我将MainWindow的指针传递给工作线程。
这真的不安全吗?
最佳答案
首先:在不保护内存(Mutex,Signal & Slot)的情况下从另一个线程读取属性始终是一个坏主意。
您的情况:如果什么都不想改变值,那么您应该没事。如果每个线程仅读取该值,则没有问题。但是,例如,如果通过单击向上箭头,向下箭头或来更改QComboBox的值,则选择一个新项(我希望您会这样做,因为这就是使用QComboBox的原因)的值将会被写入,如果您的工作线程想要在同一时刻读取该值,则应用程序可能会导致崩溃(是否发生卡什取决于您的线程提取信息的频率)。
您的应用程序从未崩溃,因为这种情况从未出现过。
但这并不意味着这不可能发生。
关于multithreading - 从另一个线程读取Qt小部件可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53058849/