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

您所在的位置:网站首页 怎样取掉悬浮窗 如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口

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

2024-07-10 15:06| 来源: 网络整理| 查看: 265

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

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

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

setWindowFlags(Qt::FramelessWindowHint);

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

setWindowOpacity(0.5);

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

加入Qt::WindowStaysOnTopHint标志

setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);

要点四:实现窗口移动

重写mousePressEvent()、mouseMoveEvent()和mouseReleaseEvent()

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 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3