我正在开发 QT 应用程序,但从托盘图标恢复窗口时遇到问题。
这是与托盘图标连接的代码:
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/restoreing-geometry.html
我在隐藏和关闭事件中保存了 Windows 状态和几何图形,然后在单击托盘图标时尝试恢复它,但没有成功..
那么,你有什么想法吗?窗口最小化时如何通过单击托盘图标来恢复窗口?