Qt实现圆型控件的三种方法之设置样式表

news2024/11/26 14:33:37

前言

最近在研究绘制各种形状的控件,这里专门挑出圆形的控件进行记录,其它形状的也大差不差,会了圆形的之后其它的也类似。

正文

这里我挑出Label来进行举例。

通过设置样式表 (QSS)

这种方法简单且适用于不需要自定义绘制的场景。就是要注意:
border-radius要是正方形边长的一半
border-radius要是正方形边长的一半
border-radius要是正方形边长的一半
重要的事情说三遍
在这里插入图片描述
但是这样设置完有一个问题:当你通过样式表为控件添加背景图片时,会出现下面三种情况
在这里插入图片描述
在这里插入图片描述
默认情况下,QLabel 设置背景图片时,图片不会自动缩放或拉伸以适应 QLabel 的尺寸。如果图片的尺寸比 QLabel 小,那么图片将只覆盖QLabel的一部分,剩余的部分将重复显示。如果图片比 QLabel 大,图片将被裁剪以适应 QLabel 的尺寸,只显示图片的一部分。
这种缺点就是要图片尺寸和控件尺寸大小相等,限制非常大。

关于图片重复我们可以设置background-repeat: no-repeat; ,使其不重复
在这里插入图片描述
原本我想继续设置background-position来使得图片适应控件的大小,但是Qt5好像并不支持background-position,我尝试设置了好几次都没有效果

  • background-position: 控制图片在 QLabel 内的显示位置。

    QLabel { background-image: url(:/images/background.png); background-position: center; }
    
  • background-size: 控制图片的缩放方式,可以设置为 covercontain 以使图片适应 QLabel 的尺寸。

    QLabel { background-image: url(:/images/background.png); background-size: cover; }
    
  • cover: 图片将被缩放以完全覆盖 QLabel,可能会裁剪掉图片的部分内容。

  • contain: 图片将被缩放以适应 QLabel,图片的全部内容会显示出来,但可能会留下一些空白区域。

在这里插入图片描述

上面说的都是通过设计师中设置样式表来进行处理,那么如果通过代码来实现

第一种:通过setpixmap设置控件上的图片

在这里插入图片描述

第二种通过setStylesheet设置控件上的图片

在这里插入图片描述

题外话

图片自适应控件
//添加背景图片
    QPixmap pixmap(":/images/face470.PNG");
    ui->label_3->setPixmap(pixmap);
    //图片缩放以填充图片
    //方法一:setScaledContents(true)
    ui->label_3->setScaledContents(true);
    //方法二:样式表中的 background-size,但是由于Qt5不支持,就不写了

    //方法三:使用QPixmap::scaled()方法手动缩放图片,然后将缩放后的图片设置到控件上。
    QPixmap scaledPixamp = pixmap.scaled(ui->label_2->size(),Qt::KeepAspectRatio);
    ui->label_2->setPixmap(scaledPixamp);

  • Qt::KeepAspectRatio:保持图片的宽高比,并调整其大小以适应控件。
  • Qt::IgnoreAspectRatio:忽略图片的宽高比,使其完全填充控件。
  • Qt::SmoothTransformation:启用抗锯齿以获得平滑的边缘。
控件自适应图片
//控件自适应图片
    //方法一:设置完图片后,用图片的尺寸再设置控件的大小
    ui->label_2->setPixmap(pixmap);
    ui->label_2->resize(pixmap.size());

    //方法二:使用setFixedSize()
    ui->label_2->setFixedSize(pixmap.size());

总结

目前在Qt5下使用设置样式表的方式只有当图片大小和控件大小相等的时候,才能完美的把图片放到控件中,其它的都有些瑕疵,关键的是background-size不能用实在太坑了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp实现应用内检测版本更新(Android直接下载/ios跳转app store)

背景:最近需要给app加一个可以检测到新版本并更新的功能, 之前没有考虑过这个问题,第一次尝试,特此记录一下。 我在这里使用到了uniapp上的更新插件,并在此插件基础上进行更改以适应我的项目。 插件链接:ht…

【专题】2023-2024中国游戏企业研发竞争力报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p37447 在当今的数字时代,游戏产业已然成为经济与文化领域中一股不可忽视的重要力量。2023 年,中国自研游戏市场更是呈现出一片繁荣且复杂的景象,实际销售收入达到了令人瞩目的 2563.8 亿元&#x…

计算机毕业设计选题推荐-民宿可视化分析-Python爬虫-随机森林算法

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Catf1ag CTF Web(九)

前言 Catf1agCTF 是一个面向所有CTF(Capture The Flag)爱好者的综合训练平台,尤其适合新手学习和提升技能 。该平台由catf1ag团队打造,拥有超过200个原创题目,题目设计注重知识点的掌握,旨在帮助新手掌握C…

易趋产品升级 | EasyTrack11_V2.0功能更新合集

近日,易趋PPM(EasyTrack PPM)为了帮助企业全面提升数字化项目管理能力,完成了新一轮的产品升级,从【个人空间】、【项目组合管理】、【合同与外包管理】。除了以上三大功能模块之外,其他升级项暂略。 1.个人…

Ajax技术详解

Ajax简介 Ajax 即 "Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式、快速动态应用的网页开发技术,无需重新加载整个网页的情况下,能够更新页面局部数据的技术。 为什么要使…

c++习题25-判断字符串是否回文

目录 一,题目 二,思路 三,代码 一,题目 描述 输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。 输入描述 输入为一行字符串(字符串中没有空白字符,字符串长度不…

Linux文件属性和打包压缩详解

1、文件属性体系 1.1 文件系统概述 [rootyunwei /]# ls -lhi 总用量 72K3505 lrwxrwxrwx. 1 root root 7 3月 7 2019 bin -> usr/bin 262152 dr-xr-xr-x. 5 root root 4.0K 12月 19 16:00 boot 399635 drwxr-xr-x 2 root root 4.0K 11月 5 2019 data1026 drw…

【数据结构】二叉树基础知识

0. 前言 在前面几期博客,我们已经学习过了各种线性的数据结构,顺序表、链表、栈、队列, 本期博客我们一起来学习一种非线性的结构——树 1. 树的概念及结构 1.1 树的概念 树是一种非线性的数据结构,它是由n(n>…

学习嵌入式第二十九天

ipc进程间通信方式 PC,即进程间通信(Inter-Process Communication),是操作系统中不同进程之间交换数据的一种机制。以下是一些常见的IPC方式: 管道:用于父子进程或兄弟进程之间的通信。消息队列&#xff…

火绒一键修复所有dll缺失?教你快速修复dll错误问题

你的电脑是否遇到过dll文件缺失的状态?那么应该如何将dll文件进行修复,不知道大家有没有听过火绒和电脑dll修复工具一键修复所有的dll缺失?今天我们就来了解一下如何使用火绒和电脑dll修复工具修复电脑错误dll文件丢失的问题。 dll是什么&…

海南云亿商务咨询有限公司靠谱不?

在这个短视频与直播浪潮席卷而来的时代,抖音电商以其独特的魅力迅速崛起,成为无数商家争相入驻的新战场。作为这一领域的佼佼者,海南云亿商务咨询有限公司凭借其专业的服务、前瞻性的视野和实战型的策略,正引领着一批又一批的商家…

【C语言进阶】数据如何安家?C语言内存中的存储艺术深度解析

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言调试 🌹🌹期待您的关注 🌹🌹 ❀C语言数据在内存中的存储 &#…

如何应对突发技术故障和危机:开发团队的应急策略

开发团队如何应对突发的技术故障和危机? 在数字化时代,软件服务的稳定性对于企业至关重要。然而,即使是大型平台,如网易云音乐,也可能遇到突发的技术故障。网页端出现502 Bad Gateway 报错,且App也无法正常…

云计算day30

1. 配置⼀主⼆从mysql57 1. mycat对mysql8不完全⽀持 2. mysql8主从问题不⼤ get_pub_key1 1. gtids事务复制 2. 删除/etc/my.cnf 3. 同步data⽂件需要先停⽤mysql服务,删除data⽬录中的 auto.cnf 4. gtid模式以及经典模式都需要锁表 flush tables with rea…

6 - Linux PXE高效批量网络装机

目录 一、PXE概述 1.简介 2.优点 3.前提条件 二、搭建PXE远程安装服务器 三、实现Kickstart无人值守安装 一、PXE概述 1.简介 PXE(Preboot eXcution Environment)预启动执行环境,是由Intel公司开发的网络引导技术,工作在Cl…

工业4G路由器

设备概述 路由器是基于4G 技术研发的无线路由网关设备,除了具备传统路由器 的 VPN 、防火墙、 NAT 、 PPPoE 、 DHCP 等功能之外,还能支持 4G 无线拨号,提供最高可达 150Mbps 的无线高速带宽。路由器支持四个以太网接口,可更好…

招募活动投稿展示 | 感受科技温度,从一个 LLM 应用开始

活动介绍 谷歌开发者招募活动是专为 Google 技术的爱好者及开发者们开展的活动,旨在鼓励大家通过多种形式 (文章/视频/coding 等) 创作与 Google 技术相关的讲解分享、实践案例或活动感受等内容,展示代码、框架、平台在真实世界中的生动表现,…

【Win开发环境搭建】Redis与可视化工具详细安装与配置过程

🎯导读:本文档提供了Redis的简介、安装指南、配置教程及常见操作方法。包括了安装包的选择与配置环境变量的过程,详细说明了如何通过修改配置文件来设置密码和端口等内容。同时,文档还介绍了如何使用命令行工具连接Redis&#xff…