试了楼上的方法,也是会出现类似的警告,而且在进程未启动的使用,使用deleteLater会发生segment fault.
目前找一种变通的办法解决,直接上代码:
- QWSWindow * window;
- QWSClient * client;
- int windowId;
- int i;
- for(i = 0; i < QWSServer::instance()->clientWindows().size() - 1; i++)
- {
- window = QWSServer::instance()->clientWindows().at(i);
- windowId = window->winId();
- client = window->client();
-
- QWSWindowOperationEvent closeEvent;
- closeEvent.simpleData.window = windowId;
- closeEvent.simpleData.op = QWSWindowOperationEvent::Close;
-
- client->sendEvent(&closeEvent);
- }
简单描述就是:在qws进程中发送closeEvent给client进程,client进程接收closeEvent后关闭client所有窗体。而一般的Qt进程在所有窗体关闭后会结束进程。
不过这样就会出现一个缺陷,就是如果在client进程中设置“所有窗体关闭后,不退出进程”,那么qws进程就关不掉这个client进程了。
此外,这部分的代码用的接口并不属于Qt公开的API。我在使用这部分接口时,还单独将
qtransportauth_qws.h
qtransportauth_qws_p.h
qwscommand_qws.cpp
qwscommand_qws_p.h
从Qt源码中拷贝出来,并在程序中
#include "qwscommand_qws.cpp"
这样的解决办法有些“不正规”,当改用其他版本的Qt库时,不知会不会出问题。(ps:我用的Qt库是4.7.3)