Qt4.5:在app.exec之前使用基于事件循环的localsocket

我正面临Qt的实际问题。我正在使用一个与QLocalSocket通信的类到另一个进程(管道/ unix套接字),我需要在其他事件发生之前进行该通信,即在app.exec()启动之前(或者更准确地说,只要应用程序启动)。我正在使用的类需要一个eventloop,因此如果我在启动事件循环之前调用类方法它就不起作用。事件循环准备好后,有什么办法可以启动吗?我想到了一个隐藏的仅限事件的窗口,并在隐藏的窗口构造函数中执行我的职责,并将此窗口固定为顶层。 基本上,我需要这个本地套接字通信任务在事件循环可用时立即启动。 有任何想法吗? 谢谢。     
已邀请:
在调用QApplication :: exec()之前,您可以使用QEventLoop启动单独的eventloop。您应该从类中发出“完成”信号并将其连接到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()。     
如果您只需要在其他所有事情之前开始通信,您可以简单地使用延迟0ms的单次定时器:
QTimer::singleShot(0, commsInstancePtr, SLOT(startCommunication()));
如果您需要在执行其他操作之前完成操作,Daniel的解决方案可能更合适。     

要回复问题请先登录注册