Проясняю непонятный заголовок =)
Есть простейшая программка, умеющая сворачиваться в трей.
Вот класс главного окна:
C++ (Qt)
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QSystemTrayIcon tray;
QMenu cmenu;
public slots:
void aboutDialog();
void prefDialog();
};
Вот конструктор:
C++ (Qt)
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow), CurrentIndex(-1)
{
ui->setupUi(this);
//
cmenu.addAction(tr("Show"));
cmenu.addAction(tr("Hide"));
cmenu.addSeparator();
cmenu.addAction(tr("Preferences"));
cmenu.addAction(tr("About"));
cmenu.addSeparator();
cmenu.addAction(qApp->style()->standardIcon(QStyle::SP_TitleBarCloseButton), tr("Quit"));
connect(cmenu.actions()[0], SIGNAL(triggered()), this, SLOT(show()));
connect(cmenu.actions()[1], SIGNAL(triggered()), this, SLOT(hide()));
connect(cmenu.actions()[3], SIGNAL(triggered()), this, SLOT(prefDialog()));
connect(cmenu.actions()[4], SIGNAL(triggered()), this, SLOT(aboutDialog()));
connect(cmenu.actions()[6], SIGNAL(triggered()), qApp, SLOT(quit()));
cmenu.actions()[6]->setShortcut(QKeySequence::Close);
tray.setIcon(qApp->style()->standardIcon(QStyle::SP_FileIcon));
tray.setContextMenu(&cmenu);
connect(&tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason)));
tray.show();
}
Собственно проблема:
Если приложение свернуть в трей, а затем запустить любой диалог (из контекстного меню трея), то после закрытия сего диалога приложение завершается. Причем корректно, без ошибок.
Диалоги вызываются так:
C++ (Qt)
void MainWindow::aboutDialog()
{
QMessageBox::information(this, tr("123"), tr("456"));
}
C++ (Qt)
void MainWindow::prefDialog()
{
configDialog dlg;
dlg.exec();
}
Пока фиксится небольшим костылем в виде:
C++ (Qt)
void MainWindow::aboutDialog()
{
QMessageBox::information(this, tr("123"), tr("456"));
if(isHidden())
{
show();
hide();
}
}
У кого-нибудь есть идеи?