2013-04-24 226 views
0

我正在處理一個示例應用程序,其中需要禁用複選框的文本,但未選中該複選框並在選中時啓用它。禁用/啓用QCheckBox文本

代碼:

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

else 
{ 
    // Disable the text of the checkbox  
} 

我已經通過各種文章看了,但我還沒有找到合適的解決方案。

+0

你是什麼意思的「禁用文本」,它是使文本「灰色」? – 2013-04-24 11:08:31

+0

@ YamHon.CHAN:是的......基本上灰色的文字 – Gojira 2013-04-24 11:09:21

回答

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); 

請注意,id沒有嘗試過,它可能有任何錯字,但你明白了。

+3

如果用戶使用白色文本的自定義配色方案會發生什麼?如果你蒙皮一些小部件,你應該整個應用程序的皮膚,使一切都是一致的。此處不能使用硬編碼顏色,應從當前調色板中獲取啓用和禁用的文本顏色。 – Paul 2013-04-24 11:15:43

+0

@Trompa:我試過了:'ui-> checkBox-> setStyleSheet(「QCheckBox :: indicator:checked {{color:black;}} QCheckBox :: indicator:unchecked {{color:grey;}}」);'但它似乎並沒有工作..... – Gojira 2013-04-24 11:17:33

+0

感謝您的幫助Trompa :) – Gojira 2013-04-24 11:29:50

0

我得到了解決方案。這是我如何實現它:

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

所以,你不需要指標部分...壞Qt文檔...我會編輯我的答案,然後,以防其他人來解決這個問題 – Trompa 2013-04-24 12:46:41