Главное окно Qt5 скрыто, всегда возвращайте true - PullRequest
1 голос
/ 14 октября 2019

Я хочу знать, скрыто ли окно или нет, чтобы я мог восстановить его из SystemTray.

Я написал очень простое приложение для тестирования, однако даже при отображении окна оно возвращает true.
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qDebug() << "From mainwindow" << this->isHidden();
}

MainWindow::~MainWindow()
{
    delete ui;
}

main.cpp

#include "mainwindow.h"

#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    qDebug() << "From main" << w.isHidden();
    return a.exec();
}

И вывод такой:

From mainwindow true
From main false

В моей реальной программе у меня есть systemtrayIcon. Я использую эти два метода для вызова функции isHidden.
Method1

MainWindow *mainwindow = new MainWindow();
qDebug() << "pointer" << mainwindow->isHidden();

Method2

MainWindow mainwindow;
qDebug() << "not pointer" << mainwindow.isHidden();

И результат будет следующим:

pointer true
not pointer true

Правда мое окно программы отображается вместо скрытого. Как получить правильный статус главного окна?

...