QT设置widget属性为FramelessWindowHint导致界面刷新的问题

2023-05-16

一.问题描述

当使用继承自QWidget的QT对象时,如果设置了窗口风格(FramelessWindowHint)为无边框,则在使用 包括 窗口最大化、windows系统(win+D),图标来回点击显示等操作时,导致界面刷新出现异常(QT的ui界面没有及时刷新绘制)

二.解决方法

这有可能是QT5之后的BUG,原因是窗口Qt::WA_Mapped属性被修改为未启用,导致窗口显示的时候未刷新显示,解决方法是把该属性设置为True即可
对窗口重载showEven,实现以下代码即可

void JMain::showEvent(QShowEvent *event) 
{ 
#if QT_VERSION >= 0x050000
     this->setAttribute(Qt::WA_Mapped); 
#endif
      QWidget::showEvent(event);
 }

参考资料:

我遇到过类似的问题 环境:Windows7 + Qt5.3 +无框架QMainWindow 我做了什么:用QMainWindow::showMinimized最小化窗口然后再次显示它。 发生了什么:窗口停止重绘。它看起来很冷冻。 我正在调试它并发现以下内容: 最小化窗口属性后,Qt::WA_Mapped已从QMainWindow中删除(您可以在qwidget.cpp中将断点设置为setAttribute_internal以进行检查)。但是在显示窗口后没有再次设置此属性。这导致QWidgetBackingStore::sync中的条件if (discardSyncRequest(tlw, tlwExtra))未得到满足,并且导致dirtyWidgets未被清除。在Qt更新系统的其他部分,这导致没有进行其他渲染。 解决方法我做了:Subclassed QMainWindow并在窗口恢复时手动设置属性Qt::WA_Mapped(处理changeEvent):


void MainWindow::changeEvent(QEvent *event) {
  if(event->type() == QEvent::WindowStateChange) {
    if(!isMinimized()) {
      setAttribute(Qt::WA_Mapped);
    }
  }
}
  

这对我很有用。正确的解决方案可能是修复Qt中的错误。 更多关于这个问题 我在Qt项目历史中发现了类似的错误(标记为已关闭): QTBUG-34147 在Qt论坛中也有类似的问题:Minimizing frameless windows... 我在QWidgetBackingStore::sync中提到的条件旁边找到了这条评论


// If the top-level is minimized, it's not visible on the screen so we can delay the
// update until it's shown again. In order to do that we must keep the dirty states.
// These will be cleared when we receive the first expose after showNormal().
// However, if the widget is not visible (isVisible() returns false), everything will
// be invalidated once the widget is shown again, so clear all dirty states.
  

似乎Qt内核中有一个错误(可能提到QTBUG-34147)已经解决了,但是它仍然存在一些问题。

参考文章:最小化窗口后窗口小部件冻结 - qmainwindow - 码客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT设置widget属性为FramelessWindowHint导致界面刷新的问题 的相关文章

随机推荐

  • 网络时延的几个概念

    假设一个数据包X从路由器A到路由器B xff0c 我们来分析下 xff0c 在这种情况下 xff0c 数据包X从A到B的总时延 xff1a 当A接收到数据包时 xff0c 会检测数据包的首部 xff0c 决定将该数据包导向哪一个链路上 xf
  • C#自动引用Debug | Release版本的dll

    1 其它模块的的dll路径 存放路径 解决方案 43 lib 文件夹下 xff0c Debug存放Debug文件 xff0c Release目录存放Release文件 2 其他项目中如何自动加载对应版本的dll文件 文本格式打开 cspro
  • Visual Studio 远程调试

    条件 xff1a 应用程序和本机调试机器需在同一局域网内 1 找vs里面的远程工具文件夹 xff0c 复制到目标电脑 2 然后点进去进行对应的位数 xff0c 找下图此文件 xff0c 右键管理员运行 xff0c 并设置选项 xff08 部
  • c#离线安装NuGet包

    1 前言 在开发c 程序时 xff0c 有时会用到第三方库 xff0c 可以在VS中从NuGet直接下载 xff0c 但是这是在开发环境联网的情况下 xff0c 如果开发环境处于无网络连接的时候 xff0c 那应该如何安装NuGet包呢 x
  • C#如何实现读写ini文件

    本文转载自 xff1a https www jb51 net article 235534 htm 一 c 读写Ini操作类 using System using System Collections Generic using Syste
  • C#Office.Interop.Excel.dll读写表格

    本文摘自 xff1a C Office Interop Excel dll读写表格 笨鸟未必先飞的博客 CSDN博客 c microsoft office interop excel 一 写入excel lt summary gt 创建一个
  • C#组件系列——又一款Excel处理神器Spire.XLS(二)

    阅读目录 一 基础入门 1 新建Workbook2 读写Workbook3 保存Workbook二 样式 1 文本样式2 单元格样式3 表格样式4 富文本编辑框三 冻结行列 1 冻结行2 冻结列四 合并单元格五 选项过滤功能六 下拉框七 显
  • C#组件系列——又一款Excel处理神器Spire.XLS(一)

    阅读目录 一 组件介绍二 组件安装使用 1 官方下载安装2 Nuget安装三 组件功能介绍 1 Excel转PDF2 Excel生成图表3 其他功能介绍四 总结 正文 前言 xff1a 最近项目里面有一些对Excel操作的需求 xff0c
  • 小米蓝牙耳机airdots青春版双耳模式

  • 用c#在excel中插入图片和设置表格宽度

    问题的由来是我想在excel中自动插入图片 xff0c 插入图片后我想根据图片的大小调整cell的大小 xff0c 于是不经意间就来到了一个坑的面前 Range对象有ColumnWidth属性和RowHeight属性 xff0c 这两个属性
  • c# log4日志配置文件

    lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt log4net outdate days 61 34 10 34 gt lt Debug 将日志以回滚文件的形式写到文件中
  • 解决crontab 中conda: command not found

    目录 问题 解决办法 1 查询conda的路径 xff0c 然后在运行脚本中指定conda命令的路径 xff08 失败 xff09 2 搜索网上的解决办法 xff0c 在crontab e 文件中加入 conda 的安装路径 3 放弃使用c
  • C#操作SQLite数据库

    C 操作 SQLite 数据库 1 SQLite介绍 2 C 操作SQLite Database 2 1 C 下SQLite操作驱动dll下载 2 2 C 使用SQLite步骤 xff08 1 xff09 新建一个project xff08
  • OpenCasCade批处理简介

    一 前言 OpenCasCade库目录下面包含各种文件 xff0c 对于编译批处理文件以前也用过很多次 xff0c 老是忘记里面的一些问题 xff0c 在此记录一下 二 如何快速编译属于自己的开发版本 本次使用vs2017为例 xff0c
  • C#实现定时器的几种方案

    在C 里关于定时器类就有三个 1 System Windows Forms Timer 2 System Threading Timer 3 定义在System Timers Timer 下面对这三个类进行讲解 System Windows
  • Win11系统软件无法拖拽发送文件的解决方法

    1 按下快捷键 win 43 r xff0c 输入 xff1a regedit 2 打开注册表之后依次展开 xff1a HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion
  • GLTF文件格式详解

    GLTF数据格式规范 GLTF文件格式 glTF 导出格式有两种后缀格式可供选择 xff1a gltf 和 glb xff1a gltf 文件导出时一般会输出两种文件类型 xff0c 一是 bin 文件 xff0c 以二进制流的方式存储顶点
  • OpenCASCADE STEP Color

    感谢原作者的分享 xff0c 原文地址 https www cnblogs com eryar p Step Color html Abstract STEP AP214的STEP中是带有颜色信息的 xff0c OCCT可以读取其中的颜色信
  • qt vs release模式下编译的程序,运行时却需要debug版本的依赖

    一 问题 今天在用批处理打包QT程序的时候发现一个问题 xff0c 我在vs下使用release模式编译的QT程序 xff0c 打包出来依赖的QT库居然是debug的库 xff0c 运行时也是程序崩溃 xff0c 我使用windeployq
  • QT设置widget属性为FramelessWindowHint导致界面刷新的问题

    一 问题描述 当使用继承自QWidget的QT对象时 xff0c 如果设置了窗口风格 xff08 FramelessWindowHint xff09 为无边框 xff0c 则在使用 包括 窗口最大化 windows系统 xff08 win