我知道在单独的线程中运行任何类型的GUI小部件都很糟糕。对于只是消息,这可以通过主线程的信号来克服。但是,如果线程需要用户输入,如何将答案发送回线程以及该线程如何等待该答案呢?
我的特例是一个使用libssh的sftp的应用程序。在连接和认证期间,用户可能需要回答一个或多个问题。但出于性能原因,所有SSH / SFTP内容必须在单独的线程中运行。
答案 0 :(得分:1)
根本不可能在非GUI线程中使用GUI类。你可以做的是使用信号和插槽将信息从一个线程交换到另一个线程。从工作线程发送信号并等待信号量,如QWaitCondition
。用回答发回一条消息。
在您的情况下,您还可以使用Qt::BlockingQueuedConnection
作为连接类型来停止工作线程,直到用户输入数据为止。 QInputDialog
也会等到用户输入完数据后才会显示。