当前位置:编程学习 > wap >>

急求一个疑难杂症!

请问一个托盘程序,没有主窗口,只有app的消息循环和一个QSystemTrayIcon。在关机时候始终会卡在这个程序的退出上。分析原因是退出消息由于没有窗口所以没有被响应到,没有调用qApp->quit(),大概和http://lists.trolltech.com/qt-interest/2006-02/thread00702-0.html这个类似的问题。
如果随便显示一个窗口,这个问题就完全没有了。但是我这个程序就是托盘程序,不要显示窗口的,请问有办法解决吗?
通过隐藏一个窗口试验过是不管用的,应该是消息没有分发给隐藏的窗口 --------------------编程问答-------------------- 那你退出时
尝试捕捉信号  然后不 要调用qApp->quit()
而是直接释放完资源后 exit(0) 看可以不可以 --------------------编程问答--------------------
    QApplication a(argc, argv);
    a.connect(&a, SIGNAL(aboutToQuit()), &a, SLOT(quit())); --------------------编程问答--------------------
引用楼主 kyowl23 的回复:
请问一个托盘程序,没有主窗口,只有app的消息循环和一个QSystemTrayIcon。在关机时候始终会卡在这个程序的退出上。分析原因是退出消息由于没有窗口所以没有被响应到,没有调用qApp->quit(),大概和http://lists.trolltech.com/qt-interest/2006-02/thread00702-0.html这个类似的问题。
如果随便显示一个窗口,这个问题就完全……

不妨给出你的所用Qt的版本、系统的版本信息 以及测试用的例子。

如果问题可以重现,你可以去提交bug:

一个测试用例如下
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QApplication::setQuitOnLastWindowClosed(false);

    QMenu * menu = new QMenu();
    menu->addAction("Quit", qApp, SLOT(quit()));

    QSystemTrayIcon * tray = new QSystemTrayIcon();
    tray->setIcon(qApp->style()->standardIcon(QStyle::SP_ArrowUp));
    tray->setContextMenu(menu);
    tray->show();

    return app.exec();
}

Windows XP/Vista Qt4.7.3/4.8.0 下无法重现 --------------------编程问答-------------------- 应该有两种可能,一种是QApplication没有把事件分发;另一种是你的app的消息循环本身无法结束
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,