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

时间:2016-02-04 00:13:14

标签: 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);
    
  4. 所以我最好的办法就是使用启用/禁用并接受灰显的样式。

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

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

    PS:相关,但没有答案

    Disabling a QCheckbox in a tricky way
    Qt - How to disable QCheckBox while retaining checked state?

4 个答案:

答案 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()
{

}