首页 > 其他分享 >如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口

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

时间:2024-02-18 19:56:13浏览次数:28  
标签:窗口 Qt 标题栏 置顶 QWidget event 半透明

在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

标签:窗口,Qt,标题栏,置顶,QWidget,event,半透明
From: https://www.cnblogs.com/xktesla/p/18019863

相关文章

  • Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按
    需求  使用QCustomPlot绘制多个目标的北斗运行轨迹图,包括累计绝对位置图和记录时刻的相对位置图。  当前绘制存在问题:    交付客户前,公司内部自测流程发现的问题。  实际预期效果为:   原因  QCustomPlot加入数据是按照x轴排列,也可以按照y轴排列,使用图层......
  • QT_linux
    加载本地图片/*QPixmap类型对象*/QPixmapimage;/*加载*/image.load(":/image/cd.png");//不缩放ui->label->setScaledContents(false);//图片在标签中居中显示(水平和垂直方向均居中)ui->label->setAlignment(Qt::AlignCenter);pixbad2(":/1/bad.png");......
  • QT打包
    Qt打包程序提示“应用程序无法正常启动(0xc000007b)”/未找到Qt5Core.dll的正确解决方案先打到配置环境变量的页面 ......
  • Qt环境Windows应用程序动态变更系统默认打印机
    有些工作环境安装有多个打印机,针对不同需求进行各种输出。如果是用QPrinter进行打印控制,可以通过setPrinterName确定使用哪一个打印机,但如果程序使用了第三方功能进行打印输出,比如通过QAxObject调用系统的文字处理直接输出,就可能会遇到无法明确指定哪一个打印机的问题。这时就需要......
  • Qt FluentUI 框架
    QtFluentUI框架项目地址:zhuzichu520/FluentUI(github.com)安装编译直接用QtCreator打开工程,编译运行example即可。根据CMakeLists.txt可以看出,编译好了后会自动在<Qt_SDK_DIR>/<Qt_Version>/<Your_compiler>/qml下面生成FluentUI文件夹,其中存放着FluentUI......
  • qt 代码添加QScrollArea滚动区域控件,设置滚动区域窗口widget后,滚动区域和滚动条之间有
    QScrollArea#MyqtWidgetStyle_m_scrollArea{background-color:rgb(189,97,99);max-width:190px;/*最大宽度*/min-width:190px;/*最大宽度*/}QWidget#MyqtWidgetStyle_m_scorllWidget{max-width:160px;/*最大宽度*/min-width:160px;......
  • Pycharm安装与配置Pyqt5
    1、创建一个项目、虚拟环境打开pycharm,File->Newproject2、安装pyqt5及工具库在PyCharm左下角的Terminal中输入:pipinstallPyQt5-ihttps://pypi.douban.com/simplepipinstallPyQt5-tools-ihttps://pypi.douban.com/simple 3、将QT工具添加到环境变量将其安装路......
  • qt自定义标题栏,纯代码实现,拿来即用,初始化列表时传入父窗口的this指针
    //头文件#ifndefTITLEBAR_H#defineTITLEBAR_H#include<QWidget>#include<QPoint>//坐标点#include<QMouseEvent>//鼠标事件classTitleBar:publicQWidget{Q_OBJECTpublic:explicitTitleBar(QWidget*parent=nullptr);//移动窗口......
  • Qt6.0开发 第二章 GUI程序设计基础
    第二章GUI程序设计基础窗口相关文件按照第一章所给提示创建一个新project,我们得到了下面的代码:widget.h:#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>QT_BEGIN_NAMESPACEnamespaceUi{classWidget;}QT_END_NAMESPACEclassWidget:publicQWidget{......
  • osg qt场景中节点去除透明
     osgqt场景中节点的透明属性消除 {osg::ref_ptr<osg::StateSet>stateState=north_wall_geode->getOrCreateStateSet();stateState->setMode(GL_BLEND,osg::StateAttribute::ON);stateState->setMode(GL_DEPTH_TEST,osg::StateAttribute::ON);......