如何设置自定义小部件的背景颜色和边框宽度?

2023-12-02

我有一个自定义小部件,其父级是另一个自定义小部件。我可以使用设置父自定义小部件的背景颜色QPalette而且效果很好。但我无法使用两者来设置子自定义小部件的边框颜色QPalette and stylesheet.

这就是我设置父自定义小部件背景颜色的方法:

QPalette pal = parentCustomWidget->palette();
QColor color = {226, 208, 208};
pal.setColor (QPalette::Background, color);
parentCustomWidget->setAutoFillBackground (true);
parentCustomWidget->setPalette (pal);
parentCustomWidget->show();

我提到了一些关于将背景颜色设置为自定义小部件的帖子/答案,但我无法设置它。这就是我设置我的childCustomWidget的颜色:

方法一:

QPalette pal = childCustomWidget->palette();
QColor color = {204, 231, 47};
pal.setColor (QPalette::Background, color);
childCustomWidget->setAutoFillBackground (true);
childCustomWidget->setPalette (pal);

方法2:

childCustomWidget->setStyleSheet ("*{border-width:" +
    BorderThickness +
    ";border-style:solid;border-color:" +
    hexColorCode + " ;color:white;}");

Note:我已经注释掉了paintEvent虚函数。

我已经浏览过这个链接:如何改变QWidget的背景颜色并合并了诸如给定的更改,但我无法将颜色设置为childCustomWidget.

我使用上述方法的自定义小部件如下所示:

this

这里橙色是我可以设置的父级的背景颜色。灰色似乎是子窗口小部件的默认颜色。


Solution

For 方法2工作,即让您的自定义小部件尊重样式表,Qt::WA_StyledBackground属性应设置为true, as it:

指示小部件应使用样式背景绘制。

Example

这是我为您准备的一个最小示例,用于演示建议解决方案的可能实现:

class ParentWidget : public QWidget
{
    Q_OBJECT
public:
    explicit ParentWidget(QWidget *parent = nullptr) : QWidget(parent) {}
};

class ChildWidget : public QWidget
{
    Q_OBJECT
public:
    explicit ChildWidget(QWidget *parent = nullptr) : QWidget(parent) {}
};

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0) :
           QMainWindow(parent)
       {
           auto *pWidget = new ParentWidget(this);
           auto *l = new QVBoxLayout(pWidget);
           auto *cWidget = new ChildWidget(pWidget);
           QString BorderThickness("2");
           QString hexColorCode("#FF00FF");

           l->addWidget(cWidget);
           l->setContentsMargins(25, 25, 25, 25);

           QPalette pal(pWidget->palette());
           QColor color(226, 208, 208);
           pal.setColor (QPalette::Background, color);
           pWidget->setAutoFillBackground (true);
           pWidget->setPalette (pal);

           cWidget->setAttribute(Qt::WA_StyledBackground, true);
           cWidget->setStyleSheet("ChildWidget { border: " + BorderThickness + " solid " +
                                  hexColorCode + ";"
                                                 "background-color: rgb(204, 231, 47);"
                                                 "color: white; }");

           setCentralWidget(pWidget);
           resize (400, 400);
       }
};

Result

正如所写,此示例产生以下结果:

Window showing a colored rectangle with a border on a colored background

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

如何设置自定义小部件的背景颜色和边框宽度? 的相关文章

随机推荐

  • Woocommerce 产品自定义字段:检查输入是否已存在

    我安装了这个 WC Fields Factory 插件来向产品添加新字段 但我需要检查这个新文本框的值是否已存在于数据库中 举个例子 比如在注册时您不能使用已在使用的电子邮件 我必须像屏幕上一样添加文本字段 Update 2 处理字段验证
  • 在视频中跳转到数组中的时间

    沿着以下路线控制 HTML5 视频中的开始位置和播放时长 我试图在每个片段播放完毕后自动从一个片段跳转到下一个片段 每个分段将具有相同的持续时间 并且每个分段的开始时间将位于一个数组中 我似乎无法弄清楚如何在 addEventListene
  • 读取访问冲突 0xCDCCDCCD

    我不断遇到读取访问冲突 这是我的代码 class List public List List const List copy List List operator const List rhs Record headPtr const vo
  • 活动更改的翻转动画

    我想在两个活动之间切换 就像 iPhone 一样 我尝试使用 overridePendingTransition int EnterAnim int exitAnim 方法 但没有成功 有人实现过这样的动画吗 fesp 当您必须更改 Act
  • Java 原生数组长度

    我在 Java 中有一个二维双精度数组 它基本上是一个值表 我想知道它有多少行 它在其他地方声明 并分配 如下 double table 然后传递给一个函数 private void doSomething double table 在我的
  • Java 和 SQL:返回 null 还是抛出异常?

    这是另一个有争议的主题 但这次我只寻找简单且有记录的答案 场景 我们假设以下方法 我会避免以下情况 sql append SELECT FROM append dogs table sql append WHERE append colNa
  • 将 C++20 模板化 Lambda 传递给函数然后调用它

    我试图将模板化 lambda 传递给函数 然后使用模板参数调用它 以启用该函数针对自定义类型的专门化 但是当我尝试调用 lambda 时 出现此错误 error invalid operands to binary expression 对
  • 使用“or”的基本 Python If 语句

    我正在遵循一个学习 python 的初学者计划 我正在努力寻找一种更好的方法来使用具有多种可能性的 if 语句 我正在编写一个基于文本的基本游戏 用户可以选择三种不同的难度级别 简单 中等 困难 我只是想编写接受 1 2 或 3 的代码来告
  • 不允许我将编辑保存到 appsscript.json

    我想访问与用户 Google 帐户关联的名称来解决GoogleJsonResponseException API call to people people get failed with error The caller does not
  • 发送 GuzzleHttp\Psr7\Request 时 Guzzle6 错误资源类型无效:数组

    我试图使用 GuzzleHttp Psr7 Request 发送代码 不知何故我收到错误 Invalid resources type array 以下是我的代码 params name gt myName id gt myId clien
  • 为什么 JavaScript 中的“假”是真的?

    我知道在 javascript 中空字符串是假的 非空字符串在 javascript 中是真的 然而 为什么是 false javascript中的真相 规范中有什么明确的内容吗 这是性能问题还是在某些情况下您需要字符串 false 代表t
  • Aeson 合并对象编码

    我想解析和编写具有一些共同基本属性和一些附加单独属性的 JSON 对象 例如 假设我们有两种类型的对象User and Email 两种类型共享相同的基本属性foo and bar 但它们具有特定于其类型的附加属性 User foo foo
  • 将大量节点插入 Neo4J

    我有一个表存储在一个典型的 MySQL 数据库中 并且我使用 java 构建了一个小型解析器工具 用于解析并构建 neo4j 数据库 该数据库将有约 4000 万个节点 每个节点都有一个或多个边 最多可能有 10 个边 问题来自我必须创建某
  • 如何调用“Select”的OnChange事件? (Delphi - 网络浏览器)

    我正在使用 Delphi 和 Web 浏览器组件来导航 html 页面 该页面有一个 Combobox 有什么方法可以调用 OnChange 事件吗 组合框是这样的
  • 将数组列中的值替换为另一个表中的相关值

    在我的数据库中我有一个表relations有一个柱子relation ids包含用户的 ID user id 它采用具有多个可能 ID 的数组形式 例如 111 112 156 4465 我还有另一张桌子names包含有关用户的信息 例如u
  • 如何在 iPhone 上使用委托模式

    我对在 iPhone 上使用委托模式有一些疑问 这是使用委托模式的代码 这段代码有效 SecondViewController secondViewController SecondViewController alloc init sec
  • 如何仅向特定行授予 MySQL 权限

    假设有一张学生桌 学生 身份证号 姓名 城市 我想创建一个用户 A 并仅授予更新 id 10 的记录的权限 CREATE USER A GRANT UPDATE ON student TO A WHERE student id 10 我尝试
  • php检查数组中的多个日期是否在日期范围内

    我有一个结构如下的数组 Array 0 gt 24 12 2013 1 gt 25 12 2013 2 gt 26 12 2014 3 gt 27 12 2013 4 我想检查数组中的任何日期是否在给定的日期范围内 日期范围的结构如下 st
  • 我可以隐藏 UIDocumentInteractionController 视图上的操作按钮吗?

    我想知道是否可以隐藏 UIDocumentInteractionController 上的操作按钮 以便用户实际上无法在另一个应用程序中打开文档 我发现了一些对我来说足够有效的东西 BOOL documentInteractionContr
  • 如何设置自定义小部件的背景颜色和边框宽度?

    我有一个自定义小部件 其父级是另一个自定义小部件 我可以使用设置父自定义小部件的背景颜色QPalette而且效果很好 但我无法使用两者来设置子自定义小部件的边框颜色QPalette and stylesheet 这就是我设置父自定义小部件背