IT评测·应用市场-qidao123.com技术社区

标题: Qt的isVisible ()函数先容和判定窗口是否在当前界面显示 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2025-2-15 02:11
标题: Qt的isVisible ()函数先容和判定窗口是否在当前界面显示
1、现象:当Qt的窗口最小化时,isVisible值一定是true,这是正常的。
表明:在Qt中,当你点击窗口的最小化按钮时,Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反,它会改变窗口的状态,将其标志为最小化。窗口的最小化是一个特别的状态,差别于被显式隐藏。在最小化状态下,窗口的内容不再显示在屏幕上,但它仍然存在于体系中,并且可以通过操作体系恢复显示。Qt通过 isMinimized() 方法提供了检测窗口是否处于最小化状态的能力。
2、isVisible() 方法在以下环境下返回 true:

isVisible() 方法在以下环境下返回 false:

 总结一下,isVisible() 方法紧张用于检测窗口是否存在且没有被显式隐藏,而 isMinimized() 方法用于检测窗口是否被最小化。这两个方法提供了差别的信息,应该根据具体需求使用。
3、测试
  1. //.h
  2. #ifndef MAINWINDOW_H
  3. #define MAINWINDOW_H
  4. #include <QMainWindow>
  5. QT_BEGIN_NAMESPACE
  6. namespace Ui { class MainWindow; }
  7. QT_END_NAMESPACE
  8. class MainWindow : public QMainWindow
  9. {
  10.     Q_OBJECT
  11. public:
  12.     MainWindow(QWidget *parent = nullptr);
  13.     ~MainWindow();
  14.     QMainWindow* m_window{nullptr};
  15. protected:
  16.     void changeEvent(QEvent *event)override;
  17. }
  18. //.cpp
  19. #include "mainwindow.h"
  20. #include "ui_mainwindow.h"
  21. #include <QDebug>
  22. MainWindow::MainWindow(QWidget *parent)
  23.     : QMainWindow(parent)
  24.     , ui(new Ui::MainWindow)
  25. {
  26.     ui->setupUi(this);
  27.     connect(ui->m_btn,&QPushButton::clicked,this,&MainWindow::OpenWindow);
  28. }
  29. MainWindow::~MainWindow()
  30. {
  31.     delete ui;
  32. }
  33. void MainWindow::changeEvent(QEvent *event)
  34. {
  35.     QMainWindow::changeEvent(event);
  36.     if (event->type() == QEvent::WindowStateChange) {
  37.         if (isMinimized()) {
  38.             qDebug() << "Window is minimized";
  39.             qDebug() << "Visible1:----" << isVisible();
  40.             hide();
  41.             qDebug() << "Visible2:---- " << isVisible();
  42.         } else if (isVisible()) {
  43.             qDebug() << "Window is visible";
  44.         }
  45.     }
  46. }
复制代码
运行结果:
(1)点击最小化按钮时,打印如下:

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

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

4、判定窗口显示在屏幕上方法
  1. void MainWindow::changeEvent(QEvent *event)
  2. {
  3.     QMainWindow::changeEvent(event);
  4.     if (event->type() == QEvent::WindowStateChange) {
  5.         if (isVisible() && !isMinimized()) {
  6.             //值是1,窗口就是显示
  7.             qDebug() << "Window is visible and not minimized";
  8.         } else if (!isVisible()) {
  9.             qDebug() << "Window is hidden";
  10.         } else if (isMinimized()) {
  11.             qDebug() << "Window is minimized";
  12.         }
  13.     }
  14. }
复制代码
窗口非最小化且非隐藏状态即为显示状态,上面的判定窗口是否显示在屏幕上也可以自动调用isVisible() && !isMinimized()接口的值来判定。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4