赞
踩
在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); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。