【发布时间】:2012-03-29 19:41:09
【问题描述】:
我正在开发 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/restoring-geometry.html
我在隐藏和关闭事件中保存了窗口状态和几何图形,然后在单击托盘图标时尝试恢复它,但没有成功..
那么,你有什么想法吗?窗口最小化时如何通过点击托盘图标恢复窗口?
【问题讨论】:
-
您的问题与托盘无关,因为最小化窗口不涉及托盘。请显示您用于保存/恢复窗口几何图形的代码。
-
我的问题与托盘有关,当我之前单击 [_] 按钮时,我想通过单击托盘图标来恢复窗口。当预先按下 [X] 按钮时,我可以通过单击托盘图标来恢复窗口。处理此问题的代码在函数 void MainWindow::trayIconClicked(QSystemTrayIcon::ActivationReason reason); (代码在上面)
-
好的。不过,您的问题在于您在恢复窗口几何图形时所做的工作。顺便说一句,除非有其他理由这样做,否则您不必只是最小化/最大化。这由操作系统窗口管理器处理。
-
好吧,但我不需要手动恢复窗口几何图形,在单击 [X] 后恢复窗口时,但正如我所说,我尝试了我在第一篇文章中发布的链接中的代码,并且没用..,Manjabes:不,那不是我要找的,我不想在用户单击 [_] 时将我的应用程序最小化到托盘图标,但我希望能够通过单击托盘图标来恢复应用程序窗口,当用户之前按下 [_] 按钮并将应用程序发送到任务栏
标签: qt window restore trayicon