我遇到了 Qt 的实际问题。我正在使用一个与 QLocalSocket 与另一个进程(管道/unix 套接字)通信的类,并且我需要在其他事件发生之前进行通信,即在 app.exec() 启动之前(或更准确地说,应用程序启动后立即进行) )。我正在使用的类需要事件循环,因此如果我在事件循环启动之前调用类方法,它将不起作用。当事件循环准备好时有什么方法可以开始一些事情吗?我想制作一个隐藏的仅事件窗口,并在隐藏窗口构造函数中履行我的职责,并将该窗口设置为顶层。
基本上,我需要在事件循环可用时立即启动此本地套接字通信任务。
有任何想法吗?
谢谢。
您可以使用启动一个单独的事件循环Q事件循环 http://doc.trolltech.com/4.5/qeventloop.html,在调用 QApplication::exec() 之前。您应该从您的类发出“完成”信号并将其连接到 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()。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)