Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我知道在单独的线程中运行任何类型的 GUI 小部件都是不好的。对于消息,这可以通过向主线程发出信号来克服。但是如果线程需要用户输入,如何将答案返回给线程,以及该线程如何等待该答案?
我的特殊情况是一个使用来自 libssh 的 sftp 的应用程序。在连接和认证期间,用户可能需要回答一个或多个问题。但出于性能原因,所有 SSH/SFTP 的东西都必须在单独的线程中运行。
根本不可能在非 GUI 线程中使用 GUI 类。你可以做的是使用信号和槽来从一个线程到另一个线程交换信息。从您的工作线程发送信号并等待信号量,例如QWaitCondition. 发回消息并附上答案。
QWaitCondition
在您的情况下,您还可以使用Qt::BlockingQueuedConnection连接类型来停止您的工作线程,直到用户输入数据。QInputDialog也等到用户完成输入数据。
Qt::BlockingQueuedConnection
QInputDialog