如何通过父母的功能退出我的Qt控制台程序?

时间:2012-07-10 14:40:46

标签: qt command-line tray

/ 编辑:已解决,请在第一个答案中查看我的评论! /

我目前正在构建一个只显示托盘图标的应用程序,因此它没有任何窗口。

好吧,在托盘图标中,我已经包含了一个QAction,以便关闭应用程序。问题是,当我调用exit(0)时,我得到seg错误;从那个功能。这是一些示例代码:

//I have a reason for setting it to be a QTimer, please don't even comment on this
class Boot_Timer : public QTimer {
  Q_OBJECT
public:
  explicit Boot_Timer(QObject *parent = 0) : QTimer(parent) {

  }
public Q_SLOTS:
  void set_up_command_line_tray(){
      //Setting up the tray  Icon.
      QSystemTrayIcon *trayIcon_cmd = new QSystemTrayIcon(this);
      trayIcon_cmd->setIcon(QIcon(":/icons/Pictures/myapp.png"));
      trayIcon_cmd->setToolTip("My tray tooltipp");
      QMenu *changer_menu = new QMenu;
      QAction *Quit_action = new QAction(tr("&Quit"), this);
      Quit_action->setIconVisibleInMenu(true);;
      connect(Quit_action, SIGNAL(triggered()), this, SLOT(close_application()));
      changer_menu->addAction(Quit_action);
      trayIcon_cmd->setContextMenu(changer_menu);
      trayIcon_cmd->show();
  }
  void close_application(){
      //HERE I GET SEG FAULT
      exit(0);
  }
    };

Boot_Timer boottimer;
#include "main.moc"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //making some checks (code omitted)
    ...
    boottimer.set_up_command_line_tray()
    return app.exec();
}

因此,托盘图标显示正常且完美,但是当我选择使用我添加到托盘图标的菜单退出应用程序时,我遇到了段错误。我想我不能使用main()函数外的exit(int state)和没有父代的函数退出应用程序......

那么退出我的应用程序的正确方法是什么?

提前感谢您的任何答案!

2 个答案:

答案 0 :(得分:1)

尝试致电

qApp->quit(0);

而不是

exit(0);

请记住#include <QApplication>

答案 1 :(得分:1)

谢谢,但没有解决它。出于某种原因,解决它的问题是执行以下操作:QSystemTrayIcon * trayIcon_cmd = new QSystemTrayIcon(0);代替QSystemTrayIcon * trayIcon_cmd = new QSystemTrayIcon(this)