c++ - 如何设置自定义小部件的背景颜色和边框宽度?
问题描述
我有一个自定义小部件,其父级是另一个自定义小部件。我可以使用设置父自定义小部件的背景颜色,QPalette
它工作正常。但我无法同时使用QPalette
和设置子自定义小部件的边框颜色stylesheet
。
这就是我设置父自定义小部件背景颜色的方式:
QPalette pal = parentCustomWidget->palette();
QColor color = {226, 208, 208};
pal.setColor (QPalette::Background, color);
parentCustomWidget->setAutoFillBackground (true);
parentCustomWidget->setPalette (pal);
parentCustomWidget->show();
我参考了几个 SO 帖子/答案来为自定义小部件设置背景颜色,但我无法设置它。这就是我设置我childCustomWidget
的颜色的方式:
方法1:
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;}");
注意:我已经注释掉了paintEvent
虚函数。
我已经浏览了这个链接:如何更改 QWidget 的背景颜色并合并了给定的更改,但我无法将颜色设置为childCustomWidget
.
我使用上述方法的自定义小部件如下所示:
这里橙色是我可以设置的父母的 BG 颜色。灰色的似乎是子小部件的默认颜色。
解决方案
解决方案
为了让Approach2工作,即让您的自定义小部件尊重样式表,Qt::WA_StyledBackground属性应设置为true
,因为它:
指示应使用样式背景绘制小部件。
例子
这是我为您准备的一个最小示例,以演示建议的解决方案的可能实现:
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);
}
};
结果
如其所写,此示例产生以下结果:
推荐阅读
- docker - Docker 容器:两种服务,相似的容器
- java - 有没有一种快速的方法来检查元素是否使用硒不显示
- reactjs - componentWillUnmount 内的 react-native console.log
- angular - 通过 Share_Target 将图像从 whatsapp 共享到 Angular 应用程序不起作用
- c++ - rsyslogd:nsd_gtls.c:551 中出现意外的 GnuTLS 错误 -54:拉取函数中的错误。[v8.24.0-52.el7_8.2 试试 http://www.rsyslog.com/e/2078
- python - 当值是列表时,在字典中获取最大值的键
- r - 将每次迭代的结果保存在同一个数据框中
- html - 我的 div 元素占用的空间比需要的多。我怎样才能摆脱那个空间?
- c# - c#我们如何从动态生成的谷歌表中授予用户访问权限?
- c++ - 在 OGDF 中设置节点边界框大小