【问题标题】:Disable/Enable the QCheckBox text禁用/启用 QCheckBox 文本
【发布时间】:2013-04-24 11:03:47
【问题描述】:

我正在开发一个示例应用程序,我需要在未选中复选框时禁用复选框文本并在选中时启用它。

代码:

if(ui->checkBox->isChecked() == true)
{
   // Enable the text of the checkbox
}

else
{
   // Disable the text of the checkbox      
}

我浏览了各种文章,但没有找到合适的解决方案。

【问题讨论】:

  • “禁用文本”是什么意思,是让文本变成“灰色”吗?
  • @YamHon.CHAN:是的....基本上是灰色的文本

标签: c++ qt qt4 qcheckbox


【解决方案1】:

使用stylesheet

对于您的所有小部件:

ui->setStyleSheet(
"QCheckBox:checked {
     {color: black;}
 }
 QCheckBox:unchecked {
     {color: grey;}
 }"
)

编辑:

正如评论中提到的,要使其与自定义主题一起使用,您可以使样式查询palette

QPalette my_palette = ui->palette()
QColor my_active_color = my_palette.color(QPalette::Active, QPalette::Text);
QColor my_disabled_color = my_palette.color(QPalette::Disabled, QPalette::Text);

QString my_style =
 QString("QCheckBox:checked { {color: rgb(%1, %2, %3);} } "     
"QCheckBox:unchecked { {color: rgb(%4, %5, %6);}}")
.arg( my_active_color.red())
.arg( my_active_color.green())
.arg( my_active_color.blue() )
.arg( my_disabled_color.red())
.arg( my_disabled_color.green())
.arg( my_disabled_color.blue() );

ui->setStyleSheet(my_style);

请注意,我没有尝试过,它可能有任何错字,但你明白了。

【讨论】:

  • 如果用户有自定义配色方案和白色文本会发生什么?如果您对某些小部件进行皮肤处理,则应该对整个应用程序进行皮肤处理,以使一切保持一致。此处不能使用硬编码颜色,启用和禁用的文本颜色应取自当前调色板。
  • @Trompa:我试过这个:ui->checkBox->setStyleSheet( "QCheckBox::indicator:checked { {color: black;} } QCheckBox::indicator:unchecked {{color: grey;}}"); 但它似乎不起作用.....
  • 感谢 Trompa 的帮助 :)
  • 如果您在每个小部件的基础上应用样式,请尝试以下方式:myWidget->setStyleSheet("color: blue");
  • 您可以使用QColor的name()方法,而不是redgreenblue。它返回字符串十六进制颜色值。
【解决方案2】:

我得到了解决方案。我就是这样实现的:

ui->checkBox->setStyleSheet( "QCheckBox:checked{color: black;} QCheckBox:unchecked{color: grey;}");

【讨论】:

  • 所以,你不需要指示部分......糟糕的 Qt 文档......我会编辑我的答案,以防其他人提出这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
相关资源
最近更新 更多