我面临着Qt的实际问题。我正在使用一个与QLocalSocket通信到另一个进程(管道/unix套接字)的类,并且我需要在其他事件发生之前(即app.exec()启动之前(或更确切地说,在app启动时)进行该通信)。 )。我正在使用的类需要一个事件循环,因此,如果在事件循环开始之前调用类方法,它将无法正常工作。当事件循环准备就绪时,有什么方法可以开始吗?我想到了一个隐藏的仅事件窗口,并在隐藏的窗口构造函数中履行职责,并将该窗口设置为顶级窗口。

基本上,一旦事件循环可用,我就需要启动此本地套接字通信任务。

有任何想法吗?

谢谢你。

最佳答案

您可以在调用QApplication::exec()之前使用QEventLoop启动一个单独的事件循环。您应该从您的类发出“完成”信号,并将其连接到QEventLoop quit()插槽,或者使用您正在使用的Qt类中提供的现有信号。

这是一个使用QNetworkAccessManager提取网页的简单示例:

app = QtCore.QCoreApplication([])
manager = QtNetwork.QNetworkAccessManager()
req = QtNetwork.QNetworkRequest(QtCore.QUrl("http://www.google.com"))
resp = manager.get(req)
eventloop = QtCore.QEventLoop()
eventloop.connect(resp, QtCore.SIGNAL('finished()'), QtCore.SLOT('quit()'))

eventloop.exec_() # this will block until resp emits finished()

print resp.readAll()

app.exec_()

虽然这可能满足您的需求,但我不太明白为什么您不能在窗口上调用show()之前简单地做任何事情,一旦完成,就调用show()。

09-26 04:16