Qt 恢复车窗位置

Qt 恢复车窗位置,qt,window,restore,trayicon,Qt,Window,Restore,Trayicon,我正在开发QT应用程序,从trayicon恢复窗口时遇到问题 以下是与托盘图标连接的代码: createActions(); createTrayIcon(); setIcon(); trayIcon->show(); connect( trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconClicked(QSy

我正在开发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,当我点击这个trayicon时,主窗口的大小和位置被恢复,这很好

但是,当我按下[u]按钮时,应用程序被最小化,任务栏图标和系统托盘图标都可见,并且在单击托盘图标后,应用程序主窗口不会自行恢复。(即使我用右键点击trayicon,然后选择“打开”选项,窗口也不会自动恢复)

我尝试了各种各样的方法,比如

this->show();
我打过电话

this->showNormal();
唯一一次,当窗口被恢复时,是我打电话的时候

this->showMaximized();
当然,主窗口确实最大化了,这不是很好,所以我将最大宽度和最大高度设置为默认应用程序维度(我不介意,因为我的应用程序不需要再大),但是。。。 虽然窗口恢复了,大小也不错,但位置却不一样,窗口恢复在我显示器的左上角,这有点糟糕。 所以我试着使用这段代码

我在隐藏和关闭事件上保存了windows状态和几何体,然后在单击trayicon时尝试恢复,但没有成功


那么,你有什么想法吗?当窗口最小化时,如何通过单击trayicon恢复窗口?

您应该在主窗口的更改事件中处理应用程序的最小化。一种解决方法是,按下X按钮时,执行相同的操作

void MainWindow::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::WindowStateChange) {
        if(isMinimized())
            QApplication::sendEvent(this, new QCloseEvent());  
            event->ignore();
    }
}

您的问题与托盘无关,因为最小化窗口不涉及托盘。请显示您用于保存/还原窗口几何图形的代码。我的问题与托盘有关,我想在我之前单击[u]按钮时通过单击托盘图标来还原窗口。我能够在先前按下[X]按钮时,通过点击托盘图标恢复窗口。处理此问题的代码位于函数void main window::trayIconClicked(QSystemTrayIcon::ActivationReason)中;(代码在上面)是你要找的吗?好的。不过,问题在于恢复窗几何图形时的操作。顺便说一句,除非有其他理由这样做,否则你不必只是最小化/最大化。这是由操作系统窗口管理器处理的。好吧,但我不需要手动恢复窗口几何图形,在点击[X]后恢复窗口时,但正如我所说的,我尝试了我在第一篇文章中发布的链接中的代码,但没有用….,Manjabes:不,这不是我要找的,我不想在用户单击[u]时将我的应用程序最小化到trayicon,但我希望能够通过单击任务栏图标来恢复应用程序窗口,当用户之前按下[u]按钮并将应用程序发送到任务时。这对我不起作用,不仅我无法通过单击任务栏图标来恢复窗口,但当我在任务栏图标上单击恢复窗口时,窗口是空的。此外,我不想更改最小化事件,我想让用户有两个选项,使用[u]按钮将应用程序最小化到任务栏,使用[x]按钮将应用程序最小化到trayicon。我想说的是,当用户使用[_]将应用程序最小化到任务栏时,带任务栏图标的恢复窗口仍然可以工作。