qt使用样式表设置窗口widget无边框的情况下为圆角

2023-05-16

提要

窗口widget是无法直接通过样式表设置为圆角的,需要在窗口QWidget中拖入控件QFrame,将QFrame设置的和窗口QWidget一样大小,将窗口QWidget中需要的控件拖入到QFrame中。

示例

下面是一个提示工具的窗口。通过它简单的记录一下样式表怎么实现圆角窗口。

效果

在这里插入图片描述
没有很好的 剪裁,看其中的绿色窗口就行。

步骤

1.创建项目,打开ui文件,在ui文件中“排兵部阵”(在QWidget窗口上放置QFrame,在QFrame上放置自己需要的控件,将QWidget设置为透明,设置QFrame为圆角,并设置其背景色实现圆角窗口);
2.在qss文件中编写样式设置;
3.在ui文件对应的类构造函数中设置窗体的背景透明和无边框;
4.在项目中加载qss文件,一般在main函数。

就该项目本身而言:

1.新建文件后,打开ui文件,向其中拖入QFrame控件,将QFrame 和QWidget设置一样的大小,接下来向QFrame中拖入需要的控件,本例中由于只做提示,便只放了一个QLabel控件。
ui文件的对象类如下:
在这里插入图片描述

样式表

my.qss

/*提示工具*/
/*提示窗口的背景*/
QWidget#ToolTipForm
{
	background-color:transparent;
}

/*提示窗口的frame*/
QWidget#ToolTipForm>QFrame#frame
{
	background-color:#aaff7f;
	border:none;
	border-radius:20px;
}

/*标签*/
QFrame#frame>QLabel#label
{
	background-color:transparent;
	color:#ffffff;
	font:14px,"宋体";
}

样式表中设置了QWidget,QFrame,QLabel三个控件。这里有一个需要注意的:需要注意控件之间的父子关系。符号“>”代表直属子部件,说明两个控件之间是父子关系。“#”代表后面的字段是前面控件类型的名称,当然也可以省略控件类型直接写作#objectname这样,更多符号,这里不再记录。
qss文件编写完成之后,加入到项目的资源文件夹下,同样需要在创建资源文件的时候,添加前缀,然后再添加qss文件,保存。最后一步,在代码中将qss文件的内容加载进去。需要在main函数中编写,这样不管大的项目,都可通过一个qss文件加载整个项目的样式。这里不再提qss文件的加载,之前的qss相关介绍中有写,读者可以自行查阅。
这样还没有达到完全的圆角窗口,窗口存在圆角下面的黑色方角,最关键的一步:需要在该提示工具的窗口类的构造函数中加入窗口无标题栏和背景透明的设置。

setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
setWindowFlags(Qt::WindowTransparentForInput | Qt::ToolTip | Qt::FramelessWindowHint);//窗口仅用于输出,不接收任何输入事件

上面只需setAttribute(Qt::WA_TranslucentBackground);和Qt::FramelessWindowHint的设置就好,作者的另两个参数是为了项目需要设置的不用加,便能实现想要的圆角窗口。
完整的代码如下:
tooltipform.h

#ifndef TOOLTIPFORM_H
#define TOOLTIPFORM_H

#include <QWidget>

/**********类功能描述:提示框***********/
namespace Ui {
class ToolTipForm;
}

class ToolTipForm : public QWidget
{
    Q_OBJECT

public:
    explicit ToolTipForm(QWidget *parent = nullptr);
    ~ToolTipForm();

    void setToolTipInfo(QString &strTip);//设置窗口提示信息

private:
    Ui::ToolTipForm *ui;
};

#endif // TOOLTIPFORM_H

tooltipform.cpp

#include "tooltipform.h"
#include "ui_tooltipform.h"

ToolTipForm::ToolTipForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ToolTipForm)
{
    ui->setupUi(this);

    //设置窗口为圆角必须设置背景透明和无边框
    setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
    setWindowFlags(Qt::WindowTransparentForInput | Qt::ToolTip | Qt::FramelessWindowHint);//窗口仅用于输出,不接收任何输入事件
}

ToolTipForm::~ToolTipForm()
{
    delete ui;
}

void ToolTipForm::setToolTipInfo(QString &strTip)
{
    ui->label->setText(strTip);
}

上面代码中窗口属性的设置Qt::WindowTransparentForInput | Qt::ToolTip,只是项目需要,实现继承于QWidget的圆角窗口的时候,只需设置窗口无边框和背景透明:

setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);

要是没有setAttribute(Qt::WA_TranslucentBackground);设置窗口透明这句,便会出现下面的效果:
在这里插入图片描述
圆角窗口的圆角周围会出现黑色的直角。而设置窗口背景透明很好的解决了这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt使用样式表设置窗口widget无边框的情况下为圆角 的相关文章

  • <Linux开发> linux应用开发-之-can通信开发例程

    xff1c Linux开发 xff1e linux应用开发 之 can通信开发例程 一 简介 对于Can通信的相关介绍 xff0c 读作不过多介绍了 xff0c 网上其它网友的介绍有很多 二 环境搭建 本次测试can通信的应用例程是运行在u
  • 使用RGBD相机模拟激光数据,用于move_base中添加新图层避障功能

    参考文章 xff1a ROS depthimage to laserscan ROS导航 向cost map中添加超声波障碍图层 一 RGBD模拟激光雷达数据 我使用的是RealSense双目相机 xff0c 首先使用的是ros自带的功能包
  • 公安视图库1400的协议

    一 平台注册 注销 1 1 注册 注销流程 注册流程1如图所示 图 1 下级平台主动向上级平台注册 xff1b 注册鉴权信息 xff08 用户名和密码 xff09 由上级平台提供 xff1b 1 2 报文说明 1 2 1 下级第一次注册 P
  • linux cmake交叉编译

    linux cmake交叉编译 linux cmake交叉编译下载测试添加依赖库需要注意的问题 linux cmake交叉编译 linux cmake交叉编译 xff0c 使用环境 xff1a ubuntu cmake gcc arm 10
  • OpenCV中使用RANSAC算法实现多张图像拼接

    思路 xff1a xff08 1 xff09 获取图像的特征点 xff0c 将每张图片的特征点保存到一个vector中 xff1b xff08 2 xff09 通过特征点匹配的方法 xff0c 找到每张图片的共有特征点 xff0c 并将其保
  • 数据安全--安全网关

    简介 对于数据安全来说 xff0c 安全网关是数据安全建设中极其重要的一部分 xff0c 我这里把它做了几种分类 xff0c 如下 xff1b 对内 xff1a 零信任安全网关 xff08 7层和4层 xff09 对外 xff1a 应用安全
  • idea使用svn拉取源码,创建分支,合并分支教程

    svn拉取源码 xff0c 创建分支 xff0c 合并分支教程 最近对svn的分支使用比较感兴趣了 xff0c 花时间研究了一下 xff0c 分享给大家 xff1a 此文章记录了idea使用svn的过程 xff1a 包括拉取源码 建立分支
  • Qt中QSS的简单使用

    样式表的组成 样式表由两大元素组成 xff1a 选择器和声明 选择器实际上可以理解为对象 xff0c 声明则是对该对象的属性的设置 样式表的使用 方法一 xff1a 在代码中调用setStyleSheet 来设置样式 xff1b 方法二 x
  • jetson nano pytorch安装及文件系统扩容

    jetson nano扩容 我安装的系统是16GB的 xff0c 如果不扩容的话文件系统只有16GB 首先安装gparted span class token function sudo span span class token func
  • Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths

    fastplanner2 摘要相关工作基于梯度的路径优化拓扑路径规划 路径制导轨迹优化A 优化失效分析B 问题公式化 拓扑路径搜索A 拓扑等价关系B 拓扑路径图C 路径缩短和修剪 实时拓扑路径规划 这篇论文是港科大开源的无人机运动规划fas
  • curl 参数配置详情

    第一类 xff1a 对于下面的这些option的可选参数 xff0c value应该被设置一个bool类型的值 xff1a CURLOPT AUTOREFERER 当根据Location 重定向时 xff0c 自动设置header中的Ref
  • 分区隔离与数据安全交换技术

    一 背景 网络的物理隔离是很多网络设计者都不愿意的选择 xff0c 网络上要承载专用的业务 xff0c 其安全性一定要得到保障 然而网络的建设就是为了互通的 xff0c 没有数据的共享 xff0c 网络的作用也缩水了不少 xff0c 因此网
  • g++编译命令大全

    gcc amp g 43 43 现在是gnu中最主要和最流行的c amp c 43 43 编译器 g 43 43 是c 43 43 的命令 xff0c 以 cpp为主 xff0c 对于c语言后缀名一般为 c 这时候命令换做gcc即可 其实是
  • Ubuntu 14.04 配置iptables防火墙

    Ubuntu默认安装是没有开启任何防火墙的 xff0c 为了学习redis数据库 xff0c 需要启用防火墙设置 whereis iptables 查看系统是否安装防火墙可以看到 iptables sbin iptables usr sha
  • Qt显示汉字乱码问题

    转载自http blog csdn net u012790503 article details 52485263 测试1 新建test工程用于测试 xff0c main c文件内容如下 xff1a span class hljs prep
  • Anaconda使用总结

    原文地址 xff1a https www jianshu com p 2f3be7781451 序 Python易用 xff0c 但用好却不易 xff0c 其中比较头疼的就是包管理和Python不同版本的问题 xff0c 特别是当你使用Wi
  • A*寻路算法介绍

    你是否在做一款游戏的时候想创造一些怪兽或者游戏主角 xff0c 让它们移动到特定的位置 xff0c 避开墙壁和障碍物呢 xff1f 如果是的话 xff0c 请看这篇教程 xff0c 我们会展示如何使用A星寻路算法来实现它 xff01 在网上
  • RTK固定解什么意思

    RTK固定解什么意思 金丝大环刀的回答 知乎 RTK固定解什么意思 知乎 rtk固定解一般是指载波相位窄巷整周模糊度已经固定之后的解算结果 narrow int xff0c 精度可达厘米级至毫米级 除此之外 xff0c 还有宽巷解 xff0
  • QtCreate由MinGW编译的项目,换为MSVC编译器后编译无法通过

    解决方法 xff1a 1 将文件的编码格式设置为utf 8且BOM格式 xff1b 2 在 pro文件中添加如下代码 msvc QMAKE CFLAGS 43 61 utf 8 QMAKE CXXFLAGS 43 61 utf 8 其中方法
  • 2D nav goal 后小车不能沿着路径走

    2D nav goal 后小车不能沿着路径走 解决方法 xff1a 下载turtlebot3的代码 xff0c 编译 xff0c 把原来的模型改成turtlebot3的 真正的错因 xff1a xacro在melodic版本上的inorde

随机推荐