如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口

在Qt框架中,要实现一个无标题栏、半透明、置顶(悬浮)的窗口,需要一些特定的设置和技巧。废话不多说,下面我将以DrawClient软件为例,介绍一下实现这种效果的四个要点。

要点一:移除标题栏(去除关闭、最小化、最大化按钮)

在窗口的构造函数中设置窗口的样式,在强调一下,一定要找构造函数中设置,否则有些平台可能无效

cpp 复制代码
setWindowFlags(Qt::FramelessWindowHint);

要点二:实现半透明效果(窗口半透明,而非控件半透明)

cpp 复制代码
setWindowOpacity(0.5);

要点三:实现置顶(悬浮)效果

加入Qt::WindowStaysOnTopHint标志

cpp 复制代码
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);

要点四:实现窗口移动

重写mousePressEvent()mouseMoveEvent()mouseReleaseEvent()

cpp 复制代码
void mousePressEvent(QMouseEvent* event) override
{
    if (event->button() == Qt::LeftButton)
    {
        m_isDragging = true;
        m_dragPos = event->globalPos() - QWidget::pos();
    }
    QWidget::mousePressEvent(event);
}

void mouseMoveEvent(QMouseEvent* event) override
{
    if (m_isDragging)
    {
        if (!QWidget::isMaximized() && !QWidget::isFullScreen()) { QWidget::move(event->globalPos() - m_dragPos); }
    }
    QWidget::mouseMoveEvent(event);
}

void mouseReleaseEvent(QMouseEvent* event) override
{
    m_isDragging = false;
    QWidget::mouseReleaseEvent(event);
}

效果图

相关项目:https://gitee.com/xktesla/draw-client/releases

相关推荐
小画家~1 分钟前
第三十四:golang 原生 pgsql 对应操作
android·开发语言·golang
ulias2124 分钟前
初步了解STL和string
开发语言·c++·mfc
二川bro5 分钟前
字符串格式化进阶:Python f-string性能优化
开发语言·python
LitchiCheng10 分钟前
Mujoco 机械臂 OMPL 进行 RRT 关节空间路径规划避障、绕障
开发语言·人工智能·python
烤麻辣烫11 分钟前
黑马程序员苍穹外卖(新手)DAY10
java·开发语言·学习·spring·intellij-idea
waves浪游17 分钟前
进程控制(上)
linux·运维·服务器·开发语言·c++
程序员三明治17 分钟前
【Java】synchronized关键字详解:从字节码到对象头与锁升级
java·开发语言·juc·synchronized··锁升级
y***548818 分钟前
Rust在嵌入式中的实时操作系统
开发语言·后端·rust
老虎062719 分钟前
Java基础面试题(11)—Java(泛型)
java·开发语言·windows
froginwe1126 分钟前
ASP ADO:深入解析ActiveX数据对象在ASP中的应用
开发语言