QInputDialog ::getText приводит к сбою приложения только со значком в системном трее (без окна)

#qt

#qt

Вопрос:

Когда я запускаю этот код и выхожу из диалогового окна ввода, приложение завершает работу (поэтому значок в системном трее исчезает) :

main.cpp

 #include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.hide();

    return a.exec();
}
  

window.h

 #ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QSystemTrayIcon>

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow();
    ~MainWindow();
    QSystemTrayIcon* sticon;
    QAction* actTexte1;
    QAction* actTexte3;
public slots:
    void changeTexte1();
    void changeTexte3();

};

#endif // MAINWINDOW_H
  

window.cpp

 #include "mainwindow.h"
#include <QSystemTrayIcon>
#include <QWidget>
#include <QMenu>
#include <QtGui>
#include <QApplication>
#include <QInputDialog>

MainWindow::MainWindow()
{
    sticon = new QSystemTrayIcon(this);
    QIcon icon(":/music.png");
    sticon->setIcon(icon);

    QMenu* stmenu = new QMenu(NULL);
    actTexte1 = new QAction("test",NULL);
    actTexte3 = new QAction("exit",NULL);
    stmenu->addAction(actTexte1);
    stmenu->addAction(actTexte3);
    sticon->setContextMenu(stmenu);
    sticon->show();
    connect(actTexte1, SIGNAL(triggered()), this, SLOT(changeTexte1()));
    connect(actTexte3, SIGNAL(triggered()), this, SLOT(changeTexte3()));


}

MainWindow::~MainWindow()
{
}

void MainWindow::changeTexte1()
{
    bool dialogResu<
    QString result = QInputDialog::getText(this, "Echonest API Key", "Enter your API key:", QLineEdit::Normal,
                                           "key", amp;dialogResult);

}

void MainWindow::changeTexte3()
{
    QApplication::quit();
    exit(1);
}
  

Если в основном я установил w.show(); вместо w.hide(); он не вылетает, НО появляется пустое окно, а я этого не хочу, мне нужно только приложение в системном трее.
Как мне поступить?

Комментарии:

1. это решается с помощью: a.setQuitOnLastWindowClosed(false);

2. можете ли вы превратить свой комментарий в ответ и пометить его как «принятый», чтобы указать, что этот вопрос больше не нуждается в ответе?