[QT编程系列-39]:用户界面UI - 样式表QSS与样式文件快速入门

目录

1. 概述

2. CSS

3. QSS示例

4. QT样式表文件使用方法与步骤

5. QT内置样式

6. QT常见基本样式


1. 概述

Qt提供了一种称为Qt样式表(Qt Style Sheets)的机制,可以用于自定义和美化Qt应用程序的用户界面(UI)

使用Qt样式表,你可以通过类似CSS的语法来定义UI元素的外观和布局,包括颜色、字体、边框、背景等。

以下是一些常用的Qt样式表属性和用法

  1. 选择器(Selectors):用于选择要应用样式的UI元素,可以使用对象名(object name)或类名(class name)作为选择器,也可以使用通配符和层级选择器。

    QPushButton {
        color: red;                    // 应用到所有QPushButton类型的按钮
    }
    
    QCheckBox#myCheckBox {
        font-size: 14px;               // 应用到objectName为"myCheckBox"的QCheckBox
    }
    
    QLabel.warning {
        background-color: yellow;      // 应用到class name为"warning"的QLabel
    }
    
  2. 属性设置:可以使用属性和值的形式来设置UI元素的外观。

    QPushButton {
        color: red;
        background-color: lightblue;    // 设置文本颜色和背景色
        border: 1px solid gray;         // 设置边框样式
    }
    
    QCheckBox:checked {
        color: green;                   // 设置选中状态的文本颜色
    }
    
  3. 盒模型属性:可以设置内边距(padding),外边距(margin),以及元素本身的尺寸和位置。

    QPushButton {
        padding: 5px;
        margin: 10px;
        width: 100px;
        height: 30px;                   // 设置内外边距、宽度和高度
    }
    
    QLabel {
        position: absolute;             // 设置绝对定位
        top: 50px;
        left: 100px;
    }
    
  4. 伪状态(Pseudo-states):用于设置特定状态下的样式,如鼠标悬停(hovered)、按下(pressed)等。

    QPushButton:hover {
        background-color: lightgray;    // 鼠标悬停时的背景颜色
    }
    
    QCheckBox:indeterminate {
        color: orange;                  // 设置不确定状态的文本颜色
    }
    
    QRadioButton:checked {
        image: url(checked.png);        // 设置选中状态时的自定义图像
    }
    

除了上述基本用法,Qt样式表还支持更多高级功能,如渐变、阴影效果、动画和自定义部件样式等

你可以通过在Qt应用程序中设置样式表来改变UI的外观和布局,使其更符合自己的需求和设计。

有关更详细的用法和属性,请查阅Qt文档中关于Qt样式表的部分。

2. CSS

CSS(Cascading Style Sheets)样式表是一种用于描述HTML或XML文档的展示样式的语言。它为网页提供了丰富的样式控制和布局选项,使网页开发人员能够轻松地定义文档元素的外观和排版。

以下是一些常用的CSS样式表属性和用法:

  1. 选择器(Selectors):用于选择要应用样式的HTML元素,可以使用标签名、class、id等作为选择器,也可以使用组合选择器。

    h1 {
        color: red;                    /* 应用到所有<h1>标签 */
    }
    
    .my-class {
        font-size: 14px;               /* 应用到class为"my-class"的元素 */
    }
    
    #my-id {
        background-color: yellow;      /* 应用到id为"my-id"的元素 */
    }
    
    p.my-class-fancy {
        color: blue;                   /* 应用到同时具有class "my-class-fancy"和<p>标签的元素 */
    }
    
  2. 属性设置:可以使用属性和值的形式来设置元素的外观。

    h1 {
        color: red;
        background-color: lightblue;    /* 设置文本颜色和背景颜色 */
        border: 1px solid gray;         /* 设置边框样式 */
    }
    
    .my-class {
        font-weight: bold;              /* 设置字体粗体 */
    }
    
    #my-id {
        text-decoration: underline;     /* 设置文本下划线 */
    }
    
  3. 盒模型属性:可以设置内边距(padding)、外边距(margin),以及元素本身的尺寸和位置。

    h1 {
        padding: 10px;
        margin-top: 20px;
        width: 300px;
        height: 50px;                   /* 设置内边距、外边距、宽度和高度 */
    }
    
    .my-class {
        position: absolute;             /* 设置绝对定位 */
        top: 50px;
        left: 100px;
    }
    
  4. 伪类(Pseudo-classes):用于设置特定状态下元素的样式,如鼠标悬停(:hover)、点击(:active)等。

    a:hover {
        color: green;                   /* 鼠标悬停时的文本颜色 */
    }
    
    input:focus {
        border: 2px solid blue;         /* 获得焦点时的边框样式 */
    }
    
    li:nth-child(odd) {
        background-color: lightgray;    /* 设置奇数位置的<li>元素的背景颜色 */
    }
    

CSS样式表还支持更多高级功能,如渐变、阴影效果、动画和媒体查询等。

使用CSS样式表,可以轻松地自定义网页的外观和布局,并使其具有吸引力和良好的用户体验。

对于更详细的属性和用法,请参考CSS的相关文档和教程。

3. QSS示例

以下是一些Qt样式表(QSS)的示例,展示了如何使用QSS来自定义Qt应用程序的UI外观:

  1. 设置全局样式:
/* 设置所有按钮的背景色和文本颜色 */
QPushButton {
    background-color: lightblue;
    color: white;
}

/* 设置所有标签的字体和字体大小 */
QLabel {
    font-family: Arial, sans-serif;
    font-size: 14px;
}

/* 设置窗口的背景图片 */
QWidget {
    background-image: url(background.jpg);
    background-repeat: no-repeat;
    background-position: center;
}

  1. 设置特定对象的样式:
/* 设置特定按钮的尺寸、背景颜色和边框样式 */
QPushButton#myButton {
    width: 100px;
    height: 30px;
    background-color: lightgreen;
    border: 1px solid darkgreen;
}

/* 设置特定文本框的字体样式和内边距 */
QLineEdit.myLineEdit {
    font-family: Verdana, sans-serif;
    padding: 5px;
}

/* 设置特定标签的文本颜色和背景颜色 */
QLabel.warningLabel {
    color: red;
    background-color: lightyellow;
}

  1. 使用伪状态和伪类:
/* 设置鼠标悬停时按钮的背景颜色 */
QPushButton:hover {
    background-color: lightgray;
}

/* 设置按下按钮时的背景颜色和文本样式 */
QPushButton:pressed {
    background-color: darkgray;
    color: white;
}

/* 设置表格中奇数行的背景颜色 */
QTableView QAbstractItemView::item:nth-child(odd) {
    background-color: lightgray;
}

/* 设置选中行的背景颜色和文本颜色 */
QTableView QAbstractItemView::item:selected {
    background-color: navy;
    color: white;
}

这些示例只是QSS的一部分用法,其中展示了一些常见的样式设置。你可以根据自己的需求定制和设计Qt应用程序的样式表,以创建独特的UI外观。在应用QSS样式表时,通常需要使用setStyleSheet()函数将样式表应用于Qt对象或整个应用程序。详细的QSS语法和属性,请参考Qt的官方文档和样式表部分。

4. QT样式表文件使用方法与步骤

fangfgnaf在Qt中,你可以将样式表内容保存到一个独立的样式表文件中,然后在应用程序中引用该样式表文件来设置UI的外观。以下是使用样式表文件的步骤:

  1. 创建一个独立的样式表文件,通常使用.qss作为文件扩展名,比如styles.qss

  2. 在样式表文件中编写所需的样式规则,就像在QSS中编写样式一样。

    /* styles.qss */
    
    QPushButton {
        background-color: lightblue;
        color: white;
    }
    
    QLabel {
        font-family: Arial, sans-serif;
        font-size: 14px;
    }
    
    QWidget {
        background-image: url(background.jpg);
        background-repeat: no-repeat;
        background-position: center;
    }
    
  3. 应用程序中加载样式表文件,并应用于相应的Qt对象或整个应用程序。

    // main.cpp
    
    #include <QApplication>
    #include <QFile>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        // 创建一个样式表文件对象
        QFile styleFile(":/styles.qss");  // 根据实际的文件路径或资源路径进行修改
    
        if (styleFile.open(QFile::ReadOnly))
        {
            // 读取样式表文件内容
            QString styleSheet = QLatin1String(styleFile.readAll());
    
            // 设置样式表
            app.setStyleSheet(styleSheet);
        }
    
        // ... 创建和显示Qt对象
    
        return app.exec();
    }
    

    在上述示例中,styles.qss文件被读取并加载到styleSheet变量中,然后通过setStyleSheet()方法设置为应用程序的样式表:/styles.qss是资源路径,可以根据你的实际情况进行修改。

提示:如果要将样式表文件作为资源文件进行管理,可以在Qt项目中的.qrc文件中添加样式表文件并使用资源路径来引用。

通过使用样式表文件,你可以更好地组织和管理UI的样式规则,方便维护和重用。同时,你可以在不重新编译应用程序的情况下修改样式表文件,使得UI的外观可以灵活地调整和定制。

5. QT内置样式

Qt框架默认提供了几种内置的样式,你可以直接在应用程序中使用它们。

以下是几个常用的Qt现有样式:

  1. Fusion样式(默认样式):这是Qt框架默认的样式,它在不同的操作系统上提供了一致的外观。

  2. Windows样式:这是Windows操作系统的原生外观样式,可以在Qt应用程序中使用。

  3. macOS样式:这是macOS操作系统的原生外观样式,同样可以在Qt应用程序中使用。

  4. WindowsVista样式:仿效Windows Vista风格的外观样式。

  5. WindowsXP样式:仿效Windows XP风格的外观样式。

使用这些样式非常简单,只需在应用程序中设置所需的样式即可。以下是使用内置样式的示例代码:

#include <QApplication>
#include <QStyleFactory>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 设置Fusion样式
    app.setStyle(QStyleFactory::create("Fusion"));

    // 设置Windows样式
    // app.setStyle(QStyleFactory::create("Windows"));

    // 设置macOS样式
    // app.setStyle(QStyleFactory::create("Macintosh"));

    // 设置WindowsVista样式
    // app.setStyle(QStyleFactory::create("WindowsVista"));

    // 设置WindowsXP样式
    // app.setStyle(QStyleFactory::create("WindowsXP"));

    // ... 创建和显示Qt对象

    return app.exec();
}

通过调用app.setStyle()方法并使用QStyleFactory::create()函数提供的内置样式之一,可以设置所需的样式。在上述示例中,使用了Fusion样式,你可以注释掉其他样式并选择你希望使用的样式。

除了这些内置样式,Qt还支持通过自定义QStyle子类来创建和使用自定义样式。这样可以实现完全定制的UI外观和行为。

6. QT常见基本样式

在Qt中,你可以使用样式表(Style Sheets)来定制和美化用户界面。以下是一些常见的样式,你可以通过样式表来实现它们:

  1. 背景颜色和背景图片:

    QWidget {
        background-color: lightblue;
        background-image: url(image.png);
        background-repeat: no-repeat;
        background-position: center;
    }
    
  2. 按钮样式:

    QPushButton {
        background-color: lightblue;
        color: white;
        border-radius: 5px;
        padding: 5px 10px;
    }
    
  3. 标签样式:

    QLabel {
        font-family: Arial, sans-serif;
        font-size: 14px;
        color: #333333;
    }
    
  4. 文本框样式:

    QLineEdit {
        padding: 5px;
        border: 1px solid #999999;
        border-radius: 3px;
    }
    
  5. 表格样式:

    QTableView {
        background-color: white;
        alternate-background-color: #f2f2f2;
        gridline-color: #cccccc;
    }
    
  6. 进度条样式:

    QProgressBar {
        background-color: #f0f0f0;
        border: 1px solid #999999;
        border-radius: 5px;
    }
    

以上只是一些常见的样式示例,你可以使用更多的CSS属性来实现更复杂的效果。在Qt的样式表中,你可以设置背景颜色、字体样式、边框样式、尺寸和间距等。同时,Qt还提供了更高级的样式定制能力,比如自定义绘制、状态切换和动画效果等。

要应用这些样式,你可以将样式表内容应用于相应的Qt对象,通过调用setStyleSheet()方法或使用Qt Designer界面编辑器。

希望这些常见的样式示例能够帮助你美化你的Qt用户界面。你可以根据实际需求和创意来定制更多独特的样式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QtAV for ubuntu16.04

下载ubuntu https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso 下载ffmpeg https://ffmpeg.org/download.html 下载QtAV https://github.com/wang-bin/QtAV/releases 更新 sudo apt update 安装库 sudo apt-get install libglu1-mesa-dev freeglut3-dev…

解密爬虫ip是如何被识别屏蔽的

在当今信息化的时代&#xff0c;网络爬虫已经成为许多企业、学术机构和个人不可或缺的工具。然而&#xff0c;随着网站安全防护的升级&#xff0c;爬虫ip往往容易被识别并屏蔽&#xff0c;给爬虫工作增加了许多困扰。在这里&#xff0c;作为一家专业的爬虫ip供应商&#xff0c;…

K8s中的Secret

Secret作用&#xff1a;加密数据存在etcd里面&#xff0c;让pod容器以挂载Volume方式进行访问。场景&#xff1a;凭据

【经济调度】基于多目标宇宙优化算法优化人工神经网络环境经济调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MySql的Windows安装指南

目录 一、MySQL的4大版本 二、软件的下载 三、MySQL8.0 版本的安装 四、配置MySQL8.0 五、配置MySQL8.0 环境变量 六、登录验证 一、MySQL的4大版本 MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;自由下载&#xff0c;但不提供官方技术支持&#xff…

5个顶级的开源有限元分析软件

每当我参加数值分析课程的教学时&#xff0c;都会回顾有限元方法的基础知识&#xff0c;很自然地就会出现使用哪种软件的问题。 以下讨论基于三个基本考虑&#xff1a; 在实际应用中&#xff0c;很少有人从头开始编写 FEM 代码。商业 FEM 软件通常在某些预定义的情况下非常易于…

EventBus 开源库学习(三)

源码细节阅读 上一节根据EventBus的使用流程把实现源码大体梳理了一遍&#xff0c;因为精力有限&#xff0c;所以看源码都是根据实现过程把基本流程看下&#xff0c;中间实现细节先忽略&#xff0c;否则越看越深不容易把握大体思路&#xff0c;这节把一些细节的部分再看看。 …

STM32的电动自行车信息采集上报系统(学习)

摘要 针对电动自行车实时监管不便的问题&#xff0c;设计了一种基于STM32的电动自行车信息采集系统&#xff0c;通过获取电池、位置和行驶状态信息并上报到服务器中&#xff0c;实现实时监管。 通过多路串口请求电池、行驶状态和位置信息&#xff0c;以并发方式进行数据接收、…

机器学习概述及其主要算法

目录 1、什么是机器学习 2、数据集 2.1、结构 3、算法分类 4、算法简介 4.1、K-近邻算法 4.2、贝叶斯分类 4.3、决策树和随机森林 4.4、逻辑回归 4.5、神经网络 4.6、线性回归 4.7、岭回归 4.8、K-means 5、机器学习开发流程 6、学习框架 1、什么是机器学习 机器…

Linux命令200例:用Look一个进行文本搜索工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f3c6;本文已…

Web压测工具http_load原理分析

01、前言 http_load是一款测试web服务器性能的开源工具&#xff0c;从下面的网址可以下载到最新版本的http_load&#xff1a; http://www.acme.com/software/http_load/ 这个软件一直在保持着更新&#xff08;不像webbench&#xff0c;已经是十年的老古董了。 webbench的源…

Pandas

系列文章目录 第一章 python数据挖掘基础环境安装和使用 第二章 Matplotlib 第三章 Numpy 文章目录 系列文章目录一、介绍1.1 为什么用Pandas&#xff1f;1.2 核心数据结构1.3 DataFrame1.3.1 结构1.3.2 常用属性1.3.3 常用方法1.3.4 DataFrame索引的设置修改行列索引值重设索…

小白电脑装机(自用)

几个月前买了配件想自己装电脑&#xff0c;结果最后无法成功点亮&#xff0c;出现的问题是主板上的DebugLED黄灯常亮&#xff0c;即DRAM灯亮。对于微星主板的Debug灯&#xff0c;其含义这篇博文中有说明。 根据另一篇博文&#xff0c;有两种可能。 我这边曾将内存条和主板一块…

gin框架学习

文章目录 配置go环境实现一个简单的web响应服务验证功能gin增加页面以及传递数据 配置go环境 去go官网下载对应的版本 go下载地址 tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz 我们可以编辑 ~/.bash_profile 或者 /etc/profile&#xff0c;并将以下命令添加该文件的末…

【新版系统架构补充】-传输介质、子网划分

传输介质 双绞线&#xff1a;无屏蔽双绞线UTP和屏蔽双绞线STP&#xff0c;传输距离在100m内 网线安装标准&#xff1a; 光纤&#xff1a;由纤芯和包层组成&#xff0c;分多模光纤MMF、单模光纤SMF 无线信道&#xff1a;分为无线电波和红外光波 通信方式和交换方式 单工…

使用隧道HTTP时如何解决网站验证码的问题?

使用代理时&#xff0c;有时候会遇到网站验证码的问题。验证码是为了防止机器人访问或恶意行为而设置的一种验证机制。当使用代理时&#xff0c;由于请求的源IP地址被更改&#xff0c;可能会触发网站的验证码机制。以下是解决网站验证码问题的几种方法&#xff1a; 1. 使用高匿…

Golang 函数参数的传递方式 值传递,引用传递

基本介绍 我们在讲解函数注意事项和使用细节时&#xff0c;已经讲过值类型和引用类型了&#xff0c;这里我们再系统总结一下&#xff0c;因为这是重难点&#xff0c;值类型参数默认就是值传递&#xff0c;而引用类型参数默认就是引用传递。 两种传递方式&#xff08;函数默认都…

前端主题切换方案——CSS变量

前言 主题切换是前端开发中老生常谈的问题&#xff0c;本文将介绍主流的前端主题切换实现方案——CSS变量 CSS变量 简介 编写CSS样式时&#xff0c;为了避免代码冗余&#xff0c;降低维护成本&#xff0c;一些CSS预编译工具&#xff08;Sass/Less/Stylus&#xff09;等都支…

安防监控国标GB28181平台EasyGBS视频快照无法显示是什么原因?如何解决?

安防视频监控国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff…

nginx的优化和防盗链 重要!!!

实验一、隐藏版本号 要把nginx的版本号隐藏起来&#xff0c;防止恶意攻击 方法一&#xff1a;修改配置文件 在http模块中加入一个命令 server_token off&#xff1b; 过程&#xff1a; 备份&#xff0c;改配置文件一定要备份 修改配置文件 在http模块中添加 server_tokens …
最新文章