QT设置控件颜色

2023-10-30

转自:http://hi.baidu.com/xiaofan812/item/9a039d62849fa22268105b11



一般的属于QWidget子类的一些控件,可以直接使用样式表,例如
label->setStyleSheet("color:white");
Qpalette类相当于对话框或是控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个QPalette对象,在显示时按照它的QPalette对象中对各部分各状态下的颜色的描述来进行绘制。就像油漆匠的油漆计划,当要刷墙时,到计划中去查一下墙需要刷成什么颜色。采用这种方式可以很方便地对窗体的各种颜色信息进行管理。
QPalette类有两个基本的概念,一个是ColorGroup,另一个是ColorRole。
ColorGroup指的是3中不同的状态,包括一下几种。QPalette::Active:获得焦点的状态。QPalette::Inactive:未获得焦点的状态。QPalette::Disable:不可用状态。通常情况下,Active状态与Inactive状态下颜色显示是一致的,当然也可根据需要设置成不一样的颜色
ColorRole指的是颜色主题,即对窗体中不同部位颜色的分类,如QPalette::Window是指背景色,QPalette::WindowText指的是前景色等。
QPalette::setColor()函数对某个主题的颜色及状态进行设置。
QPalette::setBrush()函数对显示进行更改,这样就有可能使用图片而不仅仅是单一的颜色来对主题进行填充了。
QPalette::setColor(ColorRole r,const Qcolor &c);对某个主题颜色进行设置,并不区分状态
QPalette::setColor(ColorGroup gr,ColorRole r,const QColor &c);对主题颜色进行设置的同时还区分了状态。
xxx->setAutoFillBackground(true);
Qpalette p=xxx->palette();
p.setColor(QPalette::Window,color);//p.setBrush(QPalette::Window,brush);
xxx->setPalette(p);
Qt之前版本中有关背景色设置的函数如setBackgroundColor()或是前景色设置的函数如setForegroundcolor()在Qt4中都被废止,统一由QPalette类进行管理。
注意要先调用setAutoFillBackground(true)设置窗体自动填充背景。如:
ui->label->setAutoFillBackground(true);    ui->label->setPalette(QColor(list.at(1).toInt(),list.at(2).toInt(),list.at(3).toInt(),list.at(4).toInt()));
ui->label->setPalette(Qt::blue);
QPalete::Window,通常指窗口部件的背景色;

  QPalette:WindowText,通常指窗口不见的前景色;

  QPalette::Base,指文本输入窗口部件(比如QtextEdit,QLinedit等)保利地产的背景色.//应该用这个的

  QPalette::Text,与QPalette::Base一块使用,指文本输入窗口部件的盗梦空间前景色;

  QPalette::Button,指按钮窗口部件的背景色;

  QPalette::ButtonText,指按钮窗口部件的前景色
 

一. 背景刷成黑色,前景色设为白色。 方法一、paltette方式,经测试,该方法不会影响到其他控件,推荐使用 
QPalette bgpal = palette();
bgpal.setColor (QPalette::Background, QColor (0, 0 , 0, 255));
//bgpal.setColor (QPalette::Background, Qt::transparent);
bgpal.setColor (QPalette::Foreground, QColor 
(255,255,255,255)); setPalette (bgpal);
方法二、stylesheet方式 影响子控件的方法是:
setStyleSheet ("background-color: #000000;color: #ffffff;");
不影响子控件的方法是:
setStyleSheet ("venus--TitleBar {background-color: 
#000000;color: #ffffff;}");
二. 圆角控件 用stylesheet方式
setStyleSheet ("border:2px groove 
gray;border-radius:10px;padding:2px 4px;");
三. 圆角窗口 RoundRectWin::RoundRectWin() { QPalette p = palette(); 
QPixmap img("roundrect.png");
QBitmap mask("roundrect_mask.png");
p.setBrush(QPalette::Window, QBrush(img));
setPalette(p);
setMask(mask);
resize(img.size());
//setWindowFlags(Qt::FramelessWindowHint);//这句会去掉标题栏 } 
注意:mask的图多余部分设为白色
四. 半透明窗口
1.窗口整体透明,但是窗体上的控件不透明。 通过设置窗体的背景色来实现,将背景色设置为全透。QPalette pal = 
palette();
pal.setColor(QPalette::Background, 
QColor(0x00,0xff,0x00,0x00)); setPalette(pal); 试验效果:
窗体标题栏不透明;
窗体客户区上的控件不透明,QLabel控件只是字显示,控件背景色透明; 窗体客户区完全透明。
另外从网上看到的方法: setAttribute(Qt::WA_TranslucentBackground, true); 
试验的结果是类似于上面的方法,但有时候窗体会被一些杂色斑点填充,未找到原因。
2.窗口及其上面的控件都半透明:
setWindowOpacity(0.7)
试验效果:窗口及控件都半透明。注意不能够setWindowFlags(Qt::FramelessWindowHint);要不就不起作用
3.窗口整体不透明,局部透明:
在Paint事件中使用Clear模式绘图。
void TestWindow::paintEvent( QPaintEvent* )
{ QPainter p(this);
 p.setCompositionMode( 
QPainter::CompositionMode_Clear ); p.fillRect( 10, 10, 300, 
300, Qt::SolidPattern ); }
试验效果:绘制区域全透明。如果绘制区域有控件不会影响控件。
以上实验均是基于Directfb的Qte测试。在Linux下及Windows下效果会略有不同。 
比如在Windows下第3个实验,绘制区域就是一个黑窟窿,如果Window本身半透,则是Window下面的内容加上半透效果,不是全透明效果。
五. 控制QPixmap的alpha
QPixmap temp(pixmapTop.size()); temp.fill(Qt::transparent);
QPainter p(&temp);
p.setCompositionMode(QPainter::CompositionMode_Source);
p.drawPixmap(0, 0, pixmapTop);

p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.fillRect(temp.rect(), QColor(0, 0, 0, alpha)); 
//--lable显示前景图片 ui->label->setScaledContents(true);
ui->label->setPixmap(temp);
六. layout 的边界 layout->setMargin (0);

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

QT设置控件颜色 的相关文章

  • 如何将枚举类传递给 QML?

    我正在学习QML with Qt并在通过时遇到一些麻烦enum class to qml 当我使用信号时int参数 一切正常 代码运行完美 But 麻烦就在这里 如果我使用信号与一些enum class我有参数undefinedqml 信号
  • Qt 图表和数据可视化小部件

    我已经安装了 Qt 5 7 来尝试 Qt 图表和 Qt 数据可视化 但我在 Qt Designer 和 Qt Creator 中都找不到新的小部件 有什么建议我应该做什么才能让新的小部件出现在设计器中 我今天遇到了完全相同的问题 默认情况下
  • 如何在 Qt-Creator 中添加自定义构建步骤?

    构建我的应用程序后 我想将其复制到特定目录 在 Windows 7 上 自定义构建步骤 cmd exe c k copy MyPlugin dll HostApp Debug plugins 但我有错误 Can t run process
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上
  • QGraphicsSimpleTextItem“无效使用不完整类型”

    我的代码如下 指针部件 h QGraphicsSimpleTextItem text 指针控件 cpp void PointerWidget placeNumbers float spacing int currentTickNumber
  • 构建qt程序时未定义的符号:找不到qt_version_tag

    我正在学习Qt5 6 我正在使用 Ubuntu 14 4 当我链接我的程序时 出现以下错误 undefined reference to qt version tag 在 CMakeLists txt 中 link libraries Qt
  • Qt 和 MOC 的困境与简单的制作

    我想这更像是一个 GNU Make 问题 而不是 Qt 和 moc 但这里是 我有一个包含多个目录Q OBJECTS 我有一些简单的代码 它收集所有这些 例如 MOCS shell grep l Q OBJECT HEADERS Assum
  • 在 QML 中控制纹理 3D 对象的不透明度

    我对 QML 中的 Qt 3D 有点陌生 我正在尝试控制 Qt 3D 的不透明度textured3D 对象 我正在使用简单qml3d https github com tripolskypetr simpleqml3d测试项目来做到这一点
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • 如何从键盘为 QTableWidget 创建信号?

    我有一张桌子 可以通过左 右 上 下按钮在里面移动 现在 当我停留在某个单元格并按空格键时 我需要创建一个信号 该信号还应该带来该单元格的坐标 我尝试使用 QTableWidget 的标准信号 但它不起作用 我该如何解决这个问题 创建一个单
  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop
  • 在 Qt 中创建/写入新文件

    我正在尝试写入文件 如果该文件不存在 则创建它 我在互联网上搜索过 但没有任何效果 我的代码目前看起来像这样 QString filename Data txt QFile file filename if file open QIODev
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 渲染具有透明度的纹理时,OpenGL 不需要的像素

    我已经为这个问题苦苦挣扎了一段时间了 当我使用 OpenGL 渲染 2D 纹理 在无透明度和部分透明度之间的过渡上具有透明度值 时 我得到了一些烦人的灰色像素 我认为这是像素值插值的产物 关于如何改进这一点有什么想法吗 I m attach
  • Qt ObjectName() 必须是唯一的吗?

    如标题所示的简单问题 如果我打电话setObjectName 在一个对象上 它是否必须是唯一的 或者只是因为约定而推荐 我已经子类化了QLabel 并希望自动为创建的对象命名 如果这是一个坏主意 我会找到一些设置随机唯一名称的方法 我实际上
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla
  • 在未安装 Qt VS Tools 的情况下以 Qt/MsBuild 格式编译 Qt 项目

    我在 Visual Studio 中有很多 Qt 项目 使用新的 Qt MsBuild 格式 https blog qt io blog 2018 02 16 qt visual studio improving performance 由
  • { Qt5.0.2/QML/QtQuick2.0/C++ } 运行没有错误的示例项目? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的设置是Qt5 0 2 MinGW 32位 我在寻找 Qt5 0 2 QML QtQuick2 0 C 代码项目示例 不是Qt Qu

随机推荐

  • Java线程池ThreadPoolExecutor-终止线程池原理

    一 终止线程池主要有两个方法 shutdown 和 shutdownNow shutdown 后线程池将变成shutdown状态 此时不接收新任务 但会处理完正在运行的 和 在阻塞队列中等待处理的任务 shutdownNow 后线程池将变成
  • ArcPy操作shp格式文件

    目录 ArcPy操作shp格式文件 shp文件介绍 创建shp 编辑shp 编辑列 字段 插入列 编辑行 记录 主要涉及的对象 arcpy Cursor 游标 对象 arcpy Row对象 arcpy Array对象 插入行 删除行 更新行
  • java中double转String如何去掉整数结尾的小数位“.0“

    可以使用Java中的DecimalFormat类 设置格式化模式来实现将double转为String 去掉整数结尾的小数位 0 以下是示例代码 double d 1234 0 DecimalFormat df new DecimalForm
  • linux 新建用户、用户组 以及为新用户分配权限

    一 Linux系统用户账号的管理 用户账号的管理工作主要涉及到用户账号的添加 修改和删除 添加用户账号就是在系统中创建一个新账号 然后为新账号分配用户号 用户组 主目录和登录Shell等资源 刚添加的账号是被锁定的 无法使用 1 添加新的用
  • C++性能优化系列——矩阵转置(八)IPP转置API性能测试

    本篇记录Intel 高性能计算函数库IPP中的转置函数ippiTranspose 8u C1R的执行情况 方便性能优化系列篇中转置实现做性能对比 函数说明 解释来自IPP2018发布文档 Intel Integrated Performan
  • Linux报错:-bash: 路径xx: No such file or directory解决方法

    为什么80 的码农都做不了架构师 gt gt gt 问题 出现这个错误 bash 路径xx No such file or directory除了cd能用外 所有linux命令都不能用 一般导致问题原因是etc profile配置文件出错导
  • 有趣的Hack-A-Sat黑掉卫星挑战赛——被破坏的阿波罗计算机(解法一)

    国家太空安全是国家安全在空间领域的表现 随着太空技术在政治 经济 军事 文化等各个领域的应用不断增加 太空已经成为国家赖以生存与发展的命脉之一 凝聚着巨大的国家利益 太空安全的重要性日益凸显 1 而在信息化时代 太空安全与信息安全紧密地结合
  • 【linux学习记笔】以war包安装部署Jenkins

    Jenkins的安装方法很多 这篇文章记录了个人学习使用war方式安装方式 一 安装准备 安装之前要先配置好JDK 配置方法在这里就不详细说明了 二 进入Jenkins官网下载war包 Jenkins官网 https www jenkins
  • 使用百度地图API出错

    在使用百度地图API做地理定位的时候 从拾取坐标系系统获取的坐标 其经纬度是反的 所以直接复制过去的时候 显示不出来地图的全景图 使用时记得交换位置
  • c#用Gnuplot画图源码

    直接调用这个类即可 需要下载个GnuPlot安装下 Author Leonardo Tazzini using System using System Diagnostics using System Drawing using Syste
  • Python爬虫学了几个月却不敢接单?过来人的经验总结收好!

    前几天有刷到一个提问 爬虫学了几个月了却还是不敢上手去接单 爬虫接单靠不靠谱 有些新手心里会犯嘀咕 怕不小心就踩了红线 作为过来人也接过不少单 来浅聊一下我的经验 这篇所说的经验总结可能更适合爬虫新手 爬虫大佬可以忽略 此篇小结 Pytho
  • MHA高可用配置和故障切换

    目录 引言 一 MySQL四种同步方式 1 1 异步复制 Async Replication 1 2 同步复制 Sync Replication 1 3 半同步复制 Semi Sync Replication 1 4 增强半同步复制 los
  • 锂电池保护板电路分析

    锂电池保护板基本模型如下 P 和P 接到负载以及充电电路 T接到充电电路的NTC R1 基准供电电阻 C1 起瞬间稳压和滤波作用 R2 过流 短路检测 R3 NTC电阻 1 当电路正常工作的的时候CO DO都是高电平 U2的两个NMOS导通
  • QT超市管理系统

    QT超市管理系统 前言 QT介绍 pro文件 主文件 main函数 窗口函数 mainwindow 用户登录 user login 超市系统数据库 maketsql 超市商品的增删改查 dlg addmak 收款码界面 picture 结语
  • SpringBoot中Server层以及Mapper层常用注解

    最近看了一下SpringBoot2的课程 发现好多的注解并不是很了解 只是简单的会用 但是真是发生的作用却不知道 最近花了一些时间把这些注解进行了一下整理 针对不同的层级进行了细致的划分 最近几天会依次给大家更新关于注解的内容 对大家有帮助
  • 大带宽、高速率接口对比---USB、PCIE、SATA、HDMI和以太网等接口

    一 PCIE接口 二 USB接口 三 SATA接口 SATA 编码方式 原始频宽 传输速率 有效速率 排线最长长度 SATA1 0 SATA2 0 8bit 10bit 3Gb s 300MB s 275MB s 1M SATA3 0 8b
  • VMware Workstation 15 语言修改

    VMware Workstation 15 语言修改 Win10系统之前因为2345 Flash的原因 把系统的地区改成了中国以外的地区 后来发现不仅Flash的问题没解决 VMware虚拟机的中文界面显示也变成了英文 之后在论坛里看到一个
  • win10如何把繁体字改成简体字

    win10如何把繁体字改成简体字 WBOY 发布 2023 07 09 13 17 05 转载 3431人浏览过 win10客户在开展文字输入的时候遇到了字体变为繁体字的状况 那么如何把繁体字改成简体字呢 是否有快捷键呢 win10繁体字改
  • Elasticsearch 相关度评分算法

    Elasticsearch 相关度评分算法 一 相关度评分算法的组成 1 1 boolean model 1 2 TF IDF 1 3 Vector space model 二 Lucene中的相关度分数算法 三 优化相关度分数计算的方式
  • QT设置控件颜色

    转自 http hi baidu com xiaofan812 item 9a039d62849fa22268105b11 一般的属于QWidget子类的一些控件 可以直接使用样式表 例如 label gt setStyleSheet co