Qt - 如何从应用程序内部初始化一些动作?
Posted
技术标签:
【中文标题】Qt - 如何从应用程序内部初始化一些动作?【英文标题】:Qt - how to initialize some actions from inside of an application? 【发布时间】: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 数据包的情况下处理这个问题?
谢谢
【问题讨论】:
【参考方案1】:App.exec() 启动主循环,根本不会阻止您在同一个线程中发送数据包。您只需要根据事件发送它们 - 例如用户按下回车键或计时器(如果您只是在测试)。这就是基于事件的编程在基本上所有工具包中的工作方式。
【讨论】:
但是如何添加代码来执行 app.exec() 无限循环,该循环将一次又一次地以 GUI 刷新功能启动? Somethink like(如果存在):app.addFunctionToLoop(function);然后是 app.exec(); 正如我所说,您可以使用计时器,例如QTimer以上是关于Qt - 如何从应用程序内部初始化一些动作?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Qt3.0 中发出跨进程信号或发布触摸/鼠标单击事件?