QT widget设置QT::FramelessWindowHint和Qt::WA_TranslucentBackground,会出现一个bug:在最小化还原时界面停止刷新
来源:互联网 发布:遗传算法 机械设计应用 编辑:程序博客网 时间:2024/06/06 04:00
QT widget设置QT::FramelessWindowHint和Qt::WA_TranslucentBackground,会出现一个bug:在最小化还原时界面停止刷新
Widget with QT::FramelessWindowHint and Qt::WA_TranslucentBackground stops paintting after minimize/restore
第一种方法
该bug在qt 5.1.1中修复, bugreport链接 https://bugreports.qt-project.org/browse/QTBUG-17548
之前的版本的话, 可以试下下面的方法, 基本可用, 但在setwindowflag后, 任务栏图标会滑动一下, 某些电脑可能还会略微闪烁
void TestDlg::changeEvent( QEvent* e ){ if( e->type() == QEvent::WindowStateChange) { if(this->windowState() & Qt::WindowMinimized ) { // } else { setWindowFlags(Qt::Window);//set normal window flag setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);//and return to your old flags this->showNormal(); } }}
第二种方法
void TestDlg::changeEvent( QEvent* e ){ if( e->type() == QEvent::WindowStateChange) { if(this->windowState() & Qt::WindowMinimized ) { repaint(); } }}
网上找到的这种方法,可能会引起一些问题,第一种方法会引起任务栏图标闪烁;
第二种方法可能会引起界面不响应任何鼠标事件(推测可能是repaint被持续循环执行了。。。)
以下是另一种方法:
在窗体还原的时候在做刷新处理,为了防止第二种方法的问题,可以考虑使用singleShot 来使窗口刷新。
......设置一个信号槽,进行信号处理。
QObject::connect(this, SIGNAL(sendWindowRestore()), this, SLOT(slotRestoreMainWindow()));bool MyWidget::winEvent(MSG * _message, long * _result){ if (_message->message == WM_SYSCOMMAND) { if ((int)_message->wParam == SC_RESTORE) { emit sendWindowRestore(); } } return QWidget::winEvent(_message, _result);}void MyWidget::slotRestoreMainWindow(){ QTimer::singleShot(0, this, SLOT(slotRestoreWindowTimeOut()));}void MyWidget::slotRestoreWindowTimeOut(){ repaint();}
0 0
- qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新
- QT widget设置QT::FramelessWindowHint和Qt::WA_TranslucentBackground,会出现一个bug:在最小化还原时界面停止刷新
- QT framelesswindowhint设置后窗体不刷新bug记录
- QT窗体设置点击任务栏按钮最小化和还原事件
- Qt窗体设置Qt::WA_TranslucentBackground为全黑的原因
- Qt无边框窗口, 设置最小化后, 再还原,所有子控件不刷新
- QT 一个widget设置多个tooltips
- Qt设置widget显示在最前端
- 对无边框的QT窗体设置点击任务栏按钮最小化和还原事件
- 对无边框的QT窗体设置点击任务栏按钮最小化和还原事件
- 对无边框的QT窗体设置点击任务栏按钮最小化和还原事件
- QT界面刷新问题
- [Qt Bug修复]关于Qt窗口设置为FrameHintLess后不能最小化
- Qt入门-设置启动时界面出现在屏幕的中央
- Qt: 给Widget设置背景图片
- Qt: 给Widget设置背景图片
- Qt: 给Widget设置背景图片
- Qt: 给Widget设置背景图片
- 设计模式之装扮模式(C++实现)
- 解析 Linux 中的 VFS 文件系统机制
- 嵌入式linux中如何查看ramdisk.img中的文件内容
- mybatis学习笔记——java.lang.NullPointerException
- node+express+mongoose快速搭建电影网站
- QT widget设置QT::FramelessWindowHint和Qt::WA_TranslucentBackground,会出现一个bug:在最小化还原时界面停止刷新
- mybatis学习笔记——java.lang.NullPointerException
- 【BZOJ2754】【codevs2403】喵星球上的点名,AC自动机与STL的狂欢
- centos7的变化
- Ionic ngcordova 二维码扫描
- python json 的使用
- MSSQL之八 实现视图与索引
- 微信公众号第三方平台开发PYTHON教程 PART 1
- bzoj 1571~1755 简单题解 (持续更新)