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

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 23:16   35   0

需求

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

悬浮菜单效果

设置置顶系统函数

包含"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);
}

修改效果截图

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP