Qt之设置QWidget背景色(QStyleOption->drawPrimitive(QStyle::PE_Widget)

2023-10-31

QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色。

Qt中窗口背景的设置,下面介绍三种方法。

1.使用QPalette
2.使用Style Sheet
3.绘图事件

一般我不用QSS设置窗口背景,也不建议使用。(这里是对于窗口而,如果是子部件当然可以)。因为窗口使用QSS设置背景之后,若子部件不使用同样的方式来设置,默认则会继承父窗口的样式。

使用QPalette

使用QPalette来设置背景色

m_pWidget = new QWidget(this);
m_pWidget->setGeometry(0, 0, 300, 100);
QPalette pal(m_pWidget->palette());

//设置背景黑色
pal.setColor(QPalette::Background, Qt::black);
m_pWidget->setAutoFillBackground(true);
m_pWidget->setPalette(pal);
m_pWidget->show();

使用Style Sheet

使用样式表来设置背景色,可以参考:Qt Style Sheets文档

m_pWidget = new QWidget(this);
m_pWidget->setGeometry(0, 0, 300, 100);
m_pWidget->setStyleSheet("background-color:black;");
m_pWidget->show();

如果从QWidget子类化一个Widget,为了能够使用样式表则需要为自定义Widget提供paintEvent事件。

void CustomWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);

QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
绘图事件

重写paintEvent,使用QPainter来绘制背景。

void Widget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);

QPainter p(this);
p.setPen(Qt::NoPen);
p.setBrush(Qt::black);
p.drawRect(rect());

}

 

简述 QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色。  Qt中窗口背景的设置,下面介绍三种方法。  使用QPalette 使用Style Sheet 绘图事件 一般我不用QSS设置窗口背景,也不建议使用。(这里是对于窗口而,如果是子部件当然可以)。因为窗口使用QSS设置背景之后,若子部件不使用同样的方式来设置,默认则会继承父窗口的样式。  简述 使用QPalette 使用Style Sheet 绘图事件 更多参考 使用QPalette 使用QPalette来设置背景色  m_pWidget = new QWidget(this); m_pWidget->setGeometry(0, 0, 300, 100); QPalette pal(m_pWidget->palette());   //设置背景黑色 pal.setColor(QPalette::Background, Qt::black); m_pWidget->setAutoFillBackground(true); m_pWidget->setPalette(pal); m_pWidget->show(); 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 使用Style Sheet 使用样式表来设置背景色,可以参考:Qt Style Sheets文档  m_pWidget = new QWidget(this); m_pWidget->setGeometry(0, 0, 300, 100); m_pWidget->setStyleSheet("background-color:black;"); m_pWidget->show(); 1 2 3 4 1 2 3 4 1 2 3 4 关于子类化QWidget,助手中有段说明:  // If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below: void CustomWidget::paintEvent(QPaintEvent *) {     QStyleOption opt;     opt.init(this);     QPainter p(this);     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 如果要子类化一个QWidget,为了能够使用样式表,则需要提供paintEvent事件。这是因为QWidget的paintEvent()是空的,而样式表要通过paint被绘制到窗口中。  警告:确保子类化的QWidget定义了Q_OBJECT宏。  绘图事件 重写paintEvent,使用QPainter来绘制背景。  void Widget::paintEvent(QPaintEvent *event) {     Q_UNUSED(event);       QPainter p(this);     p.setPen(Qt::NoPen);     p.setBrush(Qt::black);     p.drawRect(rect());

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

Qt之设置QWidget背景色(QStyleOption->drawPrimitive(QStyle::PE_Widget) 的相关文章

  • Qt程序部署到多平台,如何?

    我是 Qt 编程新手 我想开发一个程序 我想在 Windows Linux ubuntu 和 Mac 上运行 听说Qt支持多平台应用程序开发 但我的问题是 在我部署或编译后 任何 Qt 库都需要在 Ubuntu 中运行这个应用程序吗 如果您
  • 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

    有没有一种安全的方法可以在不调用 QApplication exec 的情况下使用 Qt 我有许多不同的对象正在对多个资源执行长期进程 至少其中一个正在与 Web 应用程序服务器进行通信 我正在制作一个 GUI 应用程序 提示用户在正确的时
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • 从布局中按名称获取小部件

    如果我想从 python Qt 的布局中获取特定的小部件 我应该如何进行 到目前为止我所做的 for i in range self ui horizontalLayout 14 count here it does fail name s
  • 在 Qt5 中,是否需要 Q_INVOKABLE 来从 QML 调用公共 QObject 函数?

    我刚刚意识到我可以调用暴露于 QML 的对象的几乎任何函数 现在我对 Q INVOKABLE 很好奇 Qt5docs http doc qt io qt 5 qtqml cppintegration exposecppattributes
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • Qt 插槽是否与其他代码并行运行?

    在此函数示例中 void MyClass myFunction emit MySignal1 emit MySignal2 如果我有slot1倾听MySignal1 and slot2倾听MySignal2 1 Is slot1总是会在之前
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Qt 5.3 无法使 QCompass (QSensor) 在 Windows 8.1 上工作

    我无法让传感器在我的 Asus Transformer T100 上工作 磁力计和指南针无法启动 并且我从加速度计获得假值 始终 x 0 y 9 8 z 0 即使使用我的笔记本电脑 我总是得到相同的结果 第一段文字编辑 Initialisa
  • Qt - 获取互联网上托管的网页的源代码(HTML 代码)

    我想获取网页的源代码 HTML 例如StackOverflow的主页 这是我到目前为止编写的代码 QNetworkAccessManager manager QNetworkReply response manager get QNetwo
  • Mac 上的 Qt — 如何访问帮助菜单中的“搜索”

    我正在将我的 Qt 应用程序移植到 Mac OS X 在 Windows Linux 上 我使用 QLineEdit 在帮助菜单中提供搜索功能 In Mac OS X I saw something like this is built i
  • Qt GUI 应用程序中的控制台输出?

    我有一个在 Windows 上运行的 Qt GUI 应用程序 它允许传递命令行选项 在某些情况下我想向控制台输出一条消息 然后退出 例如 int main int argc char argv QApplication a argc arg
  • 如何访问Loader的sourceComponent中的QML对象?

    我可能需要读取或写入的一些属性Loader s sourceComponent来自一些外部函数 访问该房产的方式是什么x里面的对象的Loader s sourceComponent import QtQuick 2 0 Item width

随机推荐

  • 常见异常解析

    ConcurrentHashMap与CopyOnWriteArrayList比较 博客分类 Java ConcurrentHashMap ConcurrentHashMap引入了Segment 每个Segment又是一个hashtable
  • LeetCode 之 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(Java)

    文章目录 LeetCode 之 剑指 Offer 21 调整数组顺序使奇数位于偶数前面 Java 一 题目 二 解题思路 三 代码 LeetCode 之 剑指 Offer 21 调整数组顺序使奇数位于偶数前面 Java 一 题目 剑指 Of
  • QuaggaJS在给定图像中定位条形码的工作原理

    QuaggaJS在给定图像中定位条形码的工作原理 一 介绍 二 步骤 1 创建图像的二进制表示 2 将图像切成网格 20 x 15个单元 3 提取每个细胞的骨架 4 组件标记 5 确定组件的方向 6 测定细胞质量 7 查找连接的单元格 8
  • PDF去水印教程

    现在的互联网时代是一个共享的时代 我们一定会经常从网络上面下载一些文件资料等等 那么是不是经常会遇到一些网站上的PDF文件会含有该网站的水印或者网址链接等等 这些水印有时候会影响我们正常的阅读文件 那么我们就需要将他们都去掉 接下来我们就是
  • java利用条件运算符的嵌套来完成此题:学习成绩> =90分.....(java50道经典编程题)

    题目 利用条件运算符的嵌套来完成此题 学习成绩 gt 90分的同学用A表示 60 89分之间的用B表示 60分以下的用C表示 这是一个写条件运算的例子 先和大家聊一下条件运算符 所谓条件运算也是比较简单的格式如下 基本格式 条件 值1 值2
  • AD9910模块高速DDS模块、功能性能讲解、开发调试注意事项、代码详解、电子设计大赛DDS

    AD9910模块高速DDS模块 STM32 驱动代码 功能性能讲解 开发调试注意事项 代码详解 电子设计大赛DDS 目录 AD9910模块高速DDS模块 STM32 驱动代码 功能性能讲解 开发调试注意事项 代码详解 电子设计大赛DDS 1
  • 稀疏数组和二维数组转换(以及持久化io实现)

    稀疏数组 1 当一个数组中大部分元素为0 或者为同一值的数组时 可以使用稀疏数组来保存数组 2 稀疏数组的处理方式是 a 记录数组一共有几行几列 有多少个不同值 b 把具有不同值元素的行 列及值记录在一个小规模的数组中 从而缩小程序的规模
  • 遥感影像深度学习样本制作

    交流QQ 3239516597 对于遥感同学 在学习深度学习时 第一步就要解决遥感数据样本的制作 遥感影像数据的样本根据不同的应用也有所不同 不知道的同学可以去看视频 遥感深度学习样本制作视频1 今天介绍一下如果已经有了遥感影像和对应的类别
  • 地址栏输入 URL 敲下回车后发生了什么

    浏览器地址栏输入 URL 回车后发生了什么 一 总结分析 分析如下 从输入 URL到回车后发生的行为如下 URL解析 DNS 查询 TCP 连接 HTTP 请求 响应请求 页面渲染 URL解析 首先判断你输入的是一个合法的URL 还是一个待
  • 定位排查Java线上内存溢出问题(服务重启,没有捕获到日志)

    一 场景 线上项目device服务模块内存不断上涨导致CPU较高 导致触发脚本执行重启 接口自动化测试平台不断的报500拒绝连接等错误提示 排查 通过服务器日志查询并没有异常错误信息打印 查看docker容器的日志发现错误是打印控制台 无法
  • 简单工厂模式

    定义 定义一个工厂类 它可以根据传入的参数返回不同类的实例 被创建的类实例通常都具有相同的父类 因为在简单工厂模式中返回所创建的类实例的方法是静态方法 所以简单工厂模式也称为静态工厂模式 简单工厂方法的要点在于 你只需要传入一个正确的参数
  • 安装Yearning SQL审核平台和Inception(基于已闭源方式)

    这是我安装Yearning SQL审核平台和Inception 已闭源 总结的文档 1 安装centos7并配置网络为桥接模式 命令 vi etc sysconfig network scripts ifcfg ens33 内部配置如下 2
  • 硬件学习--不同硬盘类型速度对比

    SATA 串行ATA总线 SCSI 小型电脑输入输出接口 SAS 希捷研究出来的取代SCSI技术的接口 SSD 固态硬盘 容量小 读写快 接口速度是 SSD gt SAS gt SCSI gt SATA SAS Serial Attache
  • 通用Ajax设计

    利用Servlet和反射技术实现通用的Ajax调用设计 如下 一 调用规则 在JS代码 调用者只需按下面的规范 即可实现异步或同步java方法调用 在你的jsp或html页面中 导入通用异步调用方法文件 km js 自定义 然后写异步调用方
  • unity中使用c#钩子

    目的 解决在应用程序最小化后无法监听到系统按键事件的情况 解决问题的过程很好笑 我先找到了第一个方法 脚本一 使用方法 脚本挂在场景中物体上即可 using System using System Collections using Sys
  • 统计学习第四弹--随机变量的概率分布

    关于随机变量概率分布的重要概念 概率 对事件的发生的可能性大小的度量值 随机变量 事先不能确定其取值的变量 离散型随机变量 只能取有限个值的随机变量 连续型随机变量 可以取一个或多个区间中任何值的随机变量 期望值 随机变量的平均取值 求法是
  • Caltech数据使用详情

    Caltech官网 http www vision caltech edu Image Datasets CaltechPedestrians 以Caltech测试集为例 大概是4095个图片吧 1 下载数据 http www vision
  • 【华为OD机试】返回矩阵中非1的元素个数【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 存在一个m n的二维数组 其成员取值范围为0 1 2 其中值为1的元素具备同化特性 每经过1S 将上下左右值为0的元素同化为1 而值为2的元素 免疫同化 将数组所有成
  • C语言小知识-不定参数函数实现

    C语言不定参数的实现 C语言在定义函数参数时 允许参数的使用数量可变 这在C语言中称为 可变参数函数 variadic function 当然在C标准库中不乏可变参数函数的使用 例如 C标准函数 printf 的声明方式为 int prin
  • Qt之设置QWidget背景色(QStyleOption->drawPrimitive(QStyle::PE_Widget)

    QWidget是所有用户界面对象的基类 这意味着可以用同样的方法为其它子类控件改变背景颜色 Qt中窗口背景的设置 下面介绍三种方法 1 使用QPalette 2 使用Style Sheet 3 绘图事件 一般我不用QSS设置窗口背景 也不建