• 4171阅读
  • 5回复

[提问]关于QSystemTrayIcon异常退出 [复制链接]

上一主题 下一主题
离线yesha
 

只看楼主 倒序阅读 楼主  发表于: 2015-01-19
主窗体隐藏起来了,只有QSystemTrayIcon显示在桌面上,此时弹出提示框QMessageBox,单击确定后退出QMessageBox时候整个程序都退出了,不知道为什么????求大侠帮忙解决!!!
离线yesha

只看该作者 1楼 发表于: 2015-01-19
如下是cpp的代码
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(QIcon(":/offline.png"));
    QMenu *menu = new QMenu(this);

    QAction *actionAbout = new QAction(this);
    connect(actionAbout, SIGNAL(triggered(bool)),qApp,SLOT(aboutQt()));
    actionAbout->setText("关于");
    menu->addAction(actionAbout);
    trayIcon->setContextMenu(menu);
    trayIcon->show();
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (trayIcon->isVisible())
    {
        hide();
        event->ignore();
    }
    else
        event->accept();
}

MainWindow::~MainWindow()
{
    delete ui;
}
现象是MainWindow隐藏后右键菜单关于,弹出aboutQt对话框,单击Ok按钮整个程序就退出了
离线dbzhang800

只看该作者 2楼 发表于: 2015-01-19
看QApplication的属性

quitOnLastWindowClosed
离线chenjun0211

只看该作者 3楼 发表于: 2015-01-20
正好之前做的一个项目也遇到相同的问题,需要这样设置
执行QApplication::setQuitOnLastWindowClosed(FALSE);后关闭对话框程序就不会退出了。

但是在执行了以上代码后处理主程序的关闭按钮的事件也不会关闭程序,所以需要你在主程序中处理关闭按钮的事件,当主界面关闭按钮被点击时先执行QApplication::setQuitOnLastWindowClosed(TRUE);再处理关闭事件就ok了。希望对你有帮助
离线dbzhang800

只看该作者 4楼 发表于: 2015-01-20
回 chenjun0211 的帖子
chenjun0211:正好之前做的一个项目也遇到相同的问题,需要这样设置
执行QApplication::setQuitOnLastWindowClosed(FALSE);后关闭对话框程序就不会退出了。
但是在执行了以上代码后处理主程序的关闭按钮的事件也不会关闭程序,所以需要你在主程序中处理关闭按钮的事件,当主界面关闭按钮被点击 .. (2015-01-20 13:13) 

退出时直接 qApp->quit(); 就行了,没必要绕个圈去间接调用它。
离线chenjun0211

只看该作者 5楼 发表于: 2015-01-20
回 dbzhang800 的帖子
dbzhang800:退出时直接 qApp->quit(); 就行了,没必要绕个圈去间接调用它。 (2015-01-20 13:32) 

快速回复
限100 字节
 
上一个 下一个