任何有效的方式都可以使一个复选框只读,但不会灰显(几乎不可见)。
setEnabled(bool)
,但是复选框显示为灰色且几乎无法读取CheckBox
类。 setCheckable
也不起作用,它根本不允许我设置检查状态:
cb = this->ui->cb_RealWorld->isCheckable();
this->ui->cb_RealWorld->setCheckable(true);
this->ui->cb_RealWorld->setChecked(someValue);
this->ui->cb_RealWorld->setCheckable(cb);
所以我最好的办法就是使用启用/禁用并接受灰显的样式。
-------编辑-------
在stylesheet examples之后,我希望我可以设置禁用复选框的样式,例如启用的复选框。到目前为止失败了。更具体一点:更改examples中的图标对我来说不起作用,可能是因为我使用的是Windows,并且路径下的图标不可用,如示例所示。
PS:相关,但没有答案
Disabling a QCheckbox in a tricky way
Qt - How to disable QCheckBox while retaining checked state?
答案 0 :(得分:11)
按照下面的代码:
this->ui->cb_RealWorld->setAttribute(Qt::WA_TransparentForMouseEvents);
this->ui->cb_RealWorld->setFocusPolicy(Qt::NoFocus);
答案 1 :(得分:6)
这是Devopia的解决方案:
void SetReadOnly(QCheckBox* checkBox, bool readOnly)
{
checkBox->setAttribute(Qt::WA_TransparentForMouseEvents, readOnly);
checkBox->setFocusPolicy(readOnly ? Qt::NoFocus : Qt::StrongFocus);
}
答案 2 :(得分:1)
在Windows上,请记住"analysis": {
"analyzer": {
"autocomplete": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"token_chars": [
"letter",
"digit",
"symbol",
"punctuation"
],
"min_gram": "1",
"type": "ngram",
"max_gram": "2"
}
}
}
并按如下所示设置标志:
#include "windows.h"
答案 3 :(得分:1)
从 QCheckBox 继承并覆盖 nextCheckState 方法 https://doc.qt.io/qt-5/qcheckbox.html#nextCheckState 即可。
void ReadOnlyCheckBox::nextCheckState()
{
}