1

/編集:解決しました。最初の回答で私のコメントを参照してください!/

現在、トレイ アイコンのみが表示されるアプリケーションを作成しているため、ウィンドウはありません。

さて、アプリケーションを閉じるために、トレイ アイコンに QAction を含めました。問題は、exit(0); を呼び出すとセグ フォールトが発生することです。その機能から。これはいくつかのサンプルコードです:

//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) を使用してアプリケーションを終了できないと思います...

では、アプリケーションを終了する正しい方法は何ですか?

ご回答ありがとうございます。

4

2 に答える 2

1

電話してみる

qApp->quit(0);

それ以外の

exit(0);

を忘れないでください#include <QApplication>

于 2012-07-10T14:46:54.607 に答える
1

ありがとう、それは解決しませんでした。何らかの理由で、それを解決したのは次のことでした: QSystemTrayIcon *trayIcon_cmd = new QSystemTrayIcon(0); QSystemTrayIcon *trayIcon_cmd = new QSystemTrayIcon(this) の代わりに

于 2012-07-11T21:26:15.497 に答える