我必须管理由更多udp频道消息更新的MainWindow。此外,读取配置文件,我必须显示或不显示主窗口,如果没有管理/调度/过滤udp消息到另一个应用程序。是否可以定义管理通信的引擎类并更新Mainwindow(如果显示)?我如何管理Mainwindow?也许使用单身人士? 我会做什么(伪代码):
main.cpp中:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("response",response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("error",error!=null?error.getMessage():"unknown error");
}
}
);
Engine.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Engine app();
app.run();
return a.exec();
}
同样在UdpRecvr类中,我会使用MainWindow Singleton。我已经读过使用带有SIGNAL / SLOT的单例是线程安全的。这是一个合适的设计方案吗? 提前谢谢。
答案 0 :(得分:0)
我通常在MainWindow中启动一个对话线程,并将工作人员的信号连接到窗口的SLOT。
void MainGUI::startServerSockets() {
serverSocket = new ServerSocket(cfg_robotPort);
//serverSocket->setDebugLevel(debugLevel);
ssocketThread = new QThread(this);
connect(ssocketThread, SIGNAL(started()), serverSocket, SLOT(run()));
connect(ssocketThread, SIGNAL(finished()), serverSocket, SLOT(deleteLater()));
connect(serverSocket, SIGNAL(socketRead(const QString &)), this, SLOT(robotSocketRead(const QString &)));
serverSocket->moveToThread(ssocketThread);
ssocketThread->start();
}
在工作人员中,您可以检查MainWindow是否可见,然后启动SIGNAL,否则与其他应用程序对话。