当前位置: 首页 > news >正文

Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示

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()接口的值来判断。

 

相关文章:

  • 理解 package.json :在基于 TypeScript 开发 Babylon.js 项目中的关键角色
  • DeepSeek底层揭秘——知识图谱与语料库的联邦学习架构
  • 今日AI和商界事件(2025-02-13)
  • 实现pytorch注意力机制-one demo
  • 业务干挂数据库,Oracle内存分配不足
  • css:position
  • K8s之存储卷
  • Prompt通用技巧
  • redis sentinel模式 与 redis 分片集群 配置
  • (五)Spring Boot学习——spring security +jwt使用(前后端分离模式)
  • iOS实现生物识别
  • git: 如何查询某个文件或者某个目录的更新历史
  • 服务器之连接简介(Detailed Explanation of Server Connection)
  • 网络编程01 - 速通计网知识点
  • python学习第十四天之机器学习名词介绍
  • RNN复兴!性能反超Transformer,训练速度提升1300倍!
  • 数据结构 栈和队列
  • 本地部署DeepSeek + AnythingLLM 搭建高效安全的个人知识库
  • 突破数据壁垒,动态住宅代理IP在数据采集中的高效应用
  • 系统思考—团队学习
  • 网站加油站/长沙网动网络科技有限公司
  • 做公司网站500元/网站收录查询站长工具
  • 西双版纳傣族自治州房价/河源市企业网站seo价格
  • 网站做页游推广/最好的seo外包
  • 招聘网站html模板/网站推广途径
  • 宁波建站平台/公司注册