gpt4 book ai didi

css - 为什么我的 QWidget 样式表无法识别 objectName 规则?

转载 作者:行者123 更新时间:2023-11-28 11:06:55 25 4
gpt4 key购买 nike

这里我有一个 QComboBox 的子类,它将根据其内容的有效性更改其文本的颜色。

namespace
{
const QString GOOD = "good";
const QString BAD = "bad";
}

NewDBLabel :: NewDBLabel( DB db, const QString & table ) :
m_db (db)
{
connect (this, SIGNAL (textChanged (const QString &)),
this, SLOT (changed (const QString &)));

setStyleSheet (
"QWidget#" + GOOD + " {color: black;} "
"QWidget#" + BAD + " {color: darkRed;}");
}

void NewDBLabel :: changed (const QString & label)
{
if (m_db .label_exists (m_table, label))
{
qWarning ("exists"); // this is printed correctly
setObjectName (BAD);
emit valid (false);
}
else
{
qWarning ("new"); // this is printed correctly
setObjectName (GOOD);
emit valid (true);
}
}

据我所知这符合 documentation : "QWidget#foo"应该匹配 objectName 为 foo 的 QWidget 的子类。

我预计 setObjectName 会导致应用不同的样式规则,但这并没有发生。知道为什么吗?

最佳答案

语法是正确的,但是 stylesheet 不是那么动态。在你的代码中你在设置stylesheet之后setObjectName(),所以objectName被改变了,但是qss没有被重新应用。所以尝试unpolish/polish 小部件。在这种情况下,qss 将能够检测到新的 objectNames 和属性。例如:

//in ctor
ui->pushButton->setStyleSheet("QWidget#good {color: green;}"
"QWidget#bad {color: red;} ");
//in handler
if(ui->pushButton->objectName() == "good")
ui->pushButton->setObjectName("bad");
else
ui->pushButton->setObjectName("good");

ui->pushButton->style()->unpolish(ui->pushButton);
ui->pushButton->style()->polish(ui->pushButton);

编辑

在我回答的第一个版本中,我建议重新应用 stylesheet,但我删除了它,因为最好和最快的方法是 unpolish/polish 小部件。此外,setStyleSheet() 会调用 polish() 并再次解析整个字符串,因此这完全是不必要的步骤,只会降低性能。

关于css - 为什么我的 QWidget 样式表无法识别 objectName 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com