0

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]ボタンをクリックすると、アプリケーションがトレイアイコンに送信され、このトレイアイコンをクリックすると、メインウィンドウのサイズと位置が復元されます。これは良いことです。

しかし、[_] ボタンを押すと、アプリケーションが最小化され、タスク バー アイコンとシステム トレイ アイコンの両方が表示され、トレイ アイコンをクリックした後、アプリケーションのメイン ウィンドウが元に戻りません。(また、右ボタンでトレイアイコンをクリックしてから「開く」オプションを選択しても、ウィンドウは元に戻りません)

代わりに、さまざまなことを試しました

this->show();

電話してみました

this->showNormal();

ウィンドウが復元されたのは、私が電話したときだけでした

this->showMaximized();

もちろん、メイン ウィンドウは実際には最大化されていましたが、これはあまり良くありませんでした。そのため、最大幅と最大高さをデフォルトのアプリケーション サイズに設定しました (アプリケーションをこれ以上大きくする必要がないため、気にしませんでした)。 . ウィンドウが復元され、サイズは良好でしたが、位置が合わず、ウィンドウがモニターの左上隅に復元されました。だから私はこのコードを使ってみました http://doc.qt.io/archives/qt-4.7/restoring-geometry.html

非表示イベントと閉じるイベントでウィンドウの状態とジオメトリを保存し、トレイアイコンがクリックされたときに復元しようとしましたが、成功しませんでした..

何かアイデアはありますか?ウィンドウが最小化されているときにトレイアイコンをクリックしてウィンドウを復元する方法は?

4

1 に答える 1

0

アプリケーションの最小化は、メイン ウィンドウの変更イベントで処理する必要があります。1 つの解決策は、X ボタンが押されたときと同じことを行うことです。

void MainWindow::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::WindowStateChange) {
        if(isMinimized())
            QApplication::sendEvent(this, new QCloseEvent());  
            event->ignore();
    }
}
于 2012-03-13T12:27:50.300 に答える