gpt4 book ai didi

c++ - 在 if 语句中未设置 Qt 动态属性

转载 作者:行者123 更新时间:2023-11-30 02:46:00 25 4
gpt4 key购买 nike

我在我的 Qt 应用程序中遇到了一个奇怪的问题...我有一个 Widget 继承了 QLabel 并具有以下样式表:

QLabel { padding: 10px ; }
QLabel[current-player=true] { background: blue ; }
QLabel:disabled { background: #eee ; }

还有一个方法:

void MyWidget::updateInformation () {
this->setEnabled (m_player->isEnable ());
if (m_player->isCurrentPlayer ()) {
qDebug () << "Setting current player to true: " << PlayerInfo::toString (m_player->player ()) ;
this->setProperty ("current-player", true);
}
// this->setProperty ("current-player", true);
qDebug () << "Property current player: " << this->property ("current-player") ;
}

如您所见,当 current-player 属性为真时,我想将小部件的背景设置为蓝色,因此我有条件 m_player->isCurrentPlayer().

我有一行注释,用于测试该属性是否有效,它确实有效。当我取消注释该行时,背景变为蓝色。

奇怪的是我的调试输出是(当注释行时):

Setting current player to true:  "Player1" 
Property current player: QVariant(bool, true)
Setting current player to true: "Player1"
Property current player: QVariant(bool, true)

如您所见,执行在 if 语句内进行,因为我看到了 Setting current player... 输出,并且 current-player 属性为真, 但背景保持白色...

我不明白我的代码在我一直设置属性时有效,如果我在 if 语句中设置属性则不起作用。

如果有人提出想法,那将对我有很大帮助!

谢谢!

最佳答案

没关系。当您更改自定义 属性时,不会重新计算样式表。由于性能问题。

解决方案:调用 polish()unpolish() 到带有样式表的小部件。

附言我想指出,使用自定义属性进行此类样式自定义是一种不好的做法,因为在复杂样式的情况下,它会导致 UI 滞后。

关于c++ - 在 if 语句中未设置 Qt 动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23971326/

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