代码之家  ›  专栏  ›  技术社区  ›  Hernán

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

  •  3
  • Hernán  · 技术社区  · 16 年前

    基本上,我需要在事件循环可用时立即启动本地套接字通信任务。

    有什么想法吗?

    非常感谢。

    2 回复  |  直到 16 年前
        1
  •  7
  •   Idan K    16 年前

    您可以使用 QEventLoop ,然后调用QApplication::exec()。您应该从类发出一个“done”信号,并将其连接到QEventLoop quit()插槽,或者使用正在使用的Qt类中提供的现有信号。

    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()。

        2
  •  2
  •   Saulius Žemaitaitis    16 年前

    如果您只需要先启动通信,只需使用延时为0毫秒的单次定时器即可:

    QTimer::singleShot(0, commsInstancePtr, SLOT(startCommunication()));
    

    如果您需要在做其他事情之前完成操作,Daniel的解决方案可能更合适。

    推荐文章