【问题标题】:Qt - how to initialize some actions from inside of an application?Qt - 如何从应用程序内部初始化一些动作?
【发布时间】:2015-01-04 04:23:38
【问题描述】:

我正在用 Qt 编写简单的 UDP 聊天。有 QUDPSocket 类提供监听和发送消息。问题是它是由信号控制的,所以我必须调用 app.exec() 否则监听不会发出任何信号。这是我的 main.cpp:

#include <QtGui/QApplication>
#include "receiver.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
int port = 5555;
Receiver rec;
rec.startListening(port);
for(int i = 0; i < 5000; i++)
{
    QByteArray ba;
    ba = "Hello";
    rec.send(ba, QHostAddress::LocalHost, port);
    ba = rec.getLastMsg();
    QTextStream(stdout) << i << ":" << ba.data() << endl;
}

return app.exec();
}

问题是 QUDPSocket 在 app.exec() 被调用后开始工作。疯了。 Qt 有没有办法在不使用另一个线程发送 UDP 数据包的情况下处理这个问题?

谢谢

【问题讨论】:

    标签: c++ multithreading sockets udp qt4


    【解决方案1】:

    App.exec() 启动主循环,根本不会阻止您在同一个线程中发送数据包。您只需要根据事件发送它们 - 例如用户按下回车键或计时器(如果您只是在测试)。这就是基于事件的编程在基本上所有工具包中的工作方式。

    【讨论】:

    • 但是如何添加代码来执行 app.exec() 无限循环,该循环将一次又一次地以 GUI 刷新功能启动? Somethink like(如果存在):app.addFunctionToLoop(function);然后是 app.exec();
    • 正如我所说,您可以使用计时器,例如QTimer
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2023-01-27
    • 2022-10-04
    • 1970-01-01
    • 2011-11-17
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多