关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法

简介: 关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法

需求

       桌面白板工具,需要悬浮工具

 

悬浮菜单效果

     

 

设置置顶系统函数

       包含"windows.h"头文件

    // 置顶
    ::SetWindowPos(HWND(this->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
    // 不置顶
    ::SetWindowPos(HWND(this->winId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

问题

       直接使用windows设置桌面置顶,透明窗口部分显示黑色,且拖动按钮绘制存在问题,如下图:

       

       

 

原代码

       在构造函数中置顶

DesktopDrawWidget::DesktopDrawWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DesktopDrawWidget),
    _transparent(true)
{
    ui->setupUi(this);
    ::SetWindowPos(HWND(this->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
    setWindowFlag(Qt::FramelessWindowHint);
    this->setAttribute(Qt::WA_TranslucentBackground, true);
    connect(ui->pushButton_max, SIGNAL(signal_posChanged()), this, SLOT(slot_posChanged()));
    slot_posChanged();
//    QTimer::singleShot(3000, this, SLOT(slot_topMost()));
}

 

修改代码逻辑

       主要是先显示,然后再置顶

DesktopDrawWidget::DesktopDrawWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DesktopDrawWidget),
    _transparent(true)
{
    ui->setupUi(this);
//    ::SetWindowPos(HWND(this->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
    setWindowFlag(Qt::FramelessWindowHint);
    this->setAttribute(Qt::WA_TranslucentBackground, true);
    connect(ui->pushButton_max, SIGNAL(signal_posChanged()), this, SLOT(slot_posChanged()));
    slot_posChanged();
    QTimer::singleShot(0, this, SLOT(slot_topMost()));
}
void DesktopDrawWidget::slot_topMost()
{
    ::SetWindowPos(HWND(this->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}

 

修改效果截图

       

       


相关文章
|
3月前
|
C++ Windows
Qt 窗口置顶
Qt 窗口置顶
108 1
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
236 3
|
3月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
75 3
|
3月前
|
网络协议
【qt】TCP的监听 (设置服务器IP地址和端口号)
【qt】TCP的监听 (设置服务器IP地址和端口号)
204 0
|
3月前
【qt】视口和窗口坐标
【qt】视口和窗口坐标
30 0
|
3月前
|
算法 数据安全/隐私保护
【qt】启动窗口的玩法
【qt】启动窗口的玩法
29 0
|
3月前
【qt】多窗口开发
【qt】多窗口开发
57 0
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
180 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
3月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
88 0