Я занимаюсь разработкой приложения QT и у меня возникла проблема с восстановлением окна из trayicon.
Вот код, связанный с иконкой в трее:
createActions();
createTrayIcon();
setIcon();
trayIcon->show();
connect(
trayIcon,
SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this,
SLOT(trayIconClicked(QSystemTrayIcon::ActivationReason))
);
создать действия
open = new QAction(tr("&Open"), this);
connect(open, SIGNAL(triggered()), this, SLOT(show()));
close = new QAction(tr("&Quit"), this);
connect(close, SIGNAL(triggered()),qApp, SLOT(quit()));
void MainWindow::createTrayIcon()
{
trayIconMenu = new QMenu(this);
trayIconMenu->addAction(open);
trayIconMenu->addSeparator();
trayIconMenu->addAction(close);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);
}
void MainWindow::trayIconClicked(QSystemTrayIcon::ActivationReason reason)
{
if(reason == QSystemTrayIcon::Trigger)
this->show();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
QString title = "Smart Typer 2000";
QString text = "Aplikácia stále beží, obnovíte ju poklepením po ikonke, zrušíte ju stlačením ikonky pravým tlačítkom,"
"a následným zvolením možnosti Quit";
if (trayIcon->isVisible()) {
trayIcon->showMessage(title,text,QSystemTrayIcon::Information,5000);
trayIcon->setToolTip("Smart Typer 2000");
this->setVisible(false);
event->ignore(); // Don't let the event propagate to the base class
}
}
Итак, когда я нажимаю кнопку [x] в главном окне, приложение отправляется в trayicon, когда я нажимаю на этот лоток, размер и положение главного окна восстанавливаются, что хорошо.
Но когда я нажимаю кнопку [_], приложение сворачивается, видны как значок на панели задач, так и значок на панели задач, и после нажатия на значок панели задач главное окно приложения не восстанавливается. (также окно не восстановится, даже если я нажму на Traicon правой кнопкой, а затем выберу «Открыть»)
Я пробовал разные вещи, например, вместо
this->show();
Я пытался позвонить
this->showNormal();
единственный раз, когда окно было восстановлено, был когда я звонил
this->showMaximized();
конечно, главное окно было действительно развернуто, что было не очень приятно, поэтому я установил максимальную ширину и максимальную высоту в размеры приложения по умолчанию (я не возражал, потому что мое приложение не должно быть больше), но...
Хотя окно было восстановлено, и размер был хорошим, положение не было, окно было восстановлено в верхнем левом углу моего монитора, что вроде как отстой.
Поэтому я попытался использовать этот кусок кода
http://doc.qt.io/archives/qt-4.7/restoring-geometry.html
Я сохранил состояние и геометрию окон при скрытии и закрытии событий, затем попытался восстановить его, когда щелкнул трейник, но безуспешно ..
Итак, у вас есть идеи? Как восстановить окно, нажав на Traicon, когда окно было свернуто?