如何使QCheckBox只读,但不是灰显

Hor*_*ter 12 c++ qt qcheckbox

任何一个方便的复选框,但也不是灰色的(几乎不可见).

  1. 我已经使用了setEnabled(bool)哪些工作,但复选框然后是灰色的,几乎无法读取
  2. 我可以对切换信号作出反应并重置状态.但我需要一种标志来确定该框是否为只读,然后重置检查状态,这意味着我需要创建自己的CheckBox类.
  3. 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);
    
    Run Code Online (Sandbox Code Playgroud)

所以我最好的方法是使用启用/禁用并接受灰色样式.

-------编辑-------

在样式表示例之后,我希望我可以设置禁用复选框的样式,例如启用的复选框.到目前为止失败了.更具体:更改示例中的图标对我来说不起作用,可能是因为我使用的是Windows,并且路径下的图标不可用,如示例所示.


PS:相关,但这里没有答案

以棘手的方式禁用QCheckbox
Qt - 如何在保持检查状态的同时禁用QCheckBox?

小智 14

以下是我的代码:

this->ui->cb_RealWorld->setAttribute(Qt::WA_TransparentForMouseEvents);
this->ui->cb_RealWorld->setFocusPolicy(Qt::NoFocus);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,只是补充一下。您将复选框保留为“已启用”和“可检查”。这使得控件忽略鼠标事件并且无法获得焦点。 (2认同)

Sil*_*cer 7

这是Devopia的解决方案:

void SetReadOnly(QCheckBox* checkBox, bool readOnly)
{
   checkBox->setAttribute(Qt::WA_TransparentForMouseEvents, readOnly);
   checkBox->setFocusPolicy(readOnly ? Qt::NoFocus : Qt::StrongFocus);
}
Run Code Online (Sandbox Code Playgroud)