本文共 1627 字,大约阅读时间需要 5 分钟。
需求
桌面白板工具,需要悬浮工具
悬浮菜单效果
设置置顶系统函数
包含"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);
}
修改效果截图
本文同步分享在 博客“红胖子(AAA红模仿)”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
转载地址:https://blog.csdn.net/weixin_33613462/article/details/114468025 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!