Восстановление положения окна - PullRequest
0 голосов
/ 13 марта 2012

Я занимаюсь разработкой приложения 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, когда окно было свернуто?

1 Ответ

0 голосов
/ 13 марта 2012

Вы должны справиться с минимизацией вашего приложения в событии изменения главного окна.Одним из решений будет сделать то же самое, что вы делаете при нажатии кнопки X.

void MainWindow::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::WindowStateChange) {
        if(isMinimized())
            QApplication::sendEvent(this, new QCloseEvent());  
            event->ignore();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...