1、现象:当Qt的窗口最小化时,isVisible值一定是true,这是正常的。
表明:在Qt中,当你点击窗口的最小化按钮时,Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反,它会改变窗口的状态,将其标志为最小化。窗口的最小化是一个特别的状态,差别于被显式隐藏。在最小化状态下,窗口的内容不再显示在屏幕上,但它仍然存在于体系中,并且可以通过操作体系恢复显示。Qt通过 isMinimized() 方法提供了检测窗口是否处于最小化状态的能力。
2、isVisible() 方法在以下环境下返回 true:
- 窗口已经被创建并且没有被调用 hide() 方法隐藏。
- 窗口没有被父窗口(假如有的话)隐藏或遮挡到不可见。
- 窗口没有被操作体系级别的其他窗口遮挡到不可见(这通常取决于窗口管理器和操作体系的行为,但 isVisible() 自己不考虑这一点)。
isVisible() 方法在以下环境下返回 false:
- 窗口被显式调用 hide() 方法隐藏。
- 窗口被其父窗口隐藏(假如父窗口被隐藏,通常子窗口也会被隐藏,除非它们被设置为独立于父窗口显示)。
- 窗口被关闭(即调用了 close() 方法)。注意,关闭窗口通常会触发窗口的烧毁,但在某些环境下(比如设置了 Qt::WA_DeleteOnClose 属性为 false),窗口可能仍然存在但不可见。
总结一下,isVisible() 方法紧张用于检测窗口是否存在且没有被显式隐藏,而 isMinimized() 方法用于检测窗口是否被最小化。这两个方法提供了差别的信息,应该根据具体需求使用。
3、测试
- //.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();
- QMainWindow* m_window{nullptr};
- protected:
- void changeEvent(QEvent *event)override;
- }
- //.cpp
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QDebug>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- connect(ui->m_btn,&QPushButton::clicked,this,&MainWindow::OpenWindow);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::changeEvent(QEvent *event)
- {
- QMainWindow::changeEvent(event);
- if (event->type() == QEvent::WindowStateChange) {
- if (isMinimized()) {
- qDebug() << "Window is minimized";
- qDebug() << "Visible1:----" << isVisible();
- hide();
- qDebug() << "Visible2:---- " << isVisible();
- } else if (isVisible()) {
- qDebug() << "Window is visible";
- }
- }
- }
复制代码 运行结果:
(1)点击最小化按钮时,打印如下:

(2)Visible为true时任务栏步伐图标

(3)Visible为false时任务栏无步伐图标

4、判定窗口显示在屏幕上方法
- void MainWindow::changeEvent(QEvent *event)
- {
- QMainWindow::changeEvent(event);
- if (event->type() == QEvent::WindowStateChange) {
- if (isVisible() && !isMinimized()) {
- //值是1,窗口就是显示
- qDebug() << "Window is visible and not minimized";
- } else if (!isVisible()) {
- qDebug() << "Window is hidden";
- } else if (isMinimized()) {
- qDebug() << "Window is minimized";
- }
- }
- }
复制代码 窗口非最小化且非隐藏状态即为显示状态,上面的判定窗口是否显示在屏幕上也可以自动调用isVisible() && !isMinimized()接口的值来判定。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |