19

任何使复选框只读的好方法,但也不会变灰(几乎不可见)。

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

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

- - - - 编辑 - - - -

按照样式表示例,我希望可以设置禁用复选框的样式,例如启用的复选框。到目前为止未能这样做。更具体地说:更改示例中的图标对我不起作用,可能是因为我使用的是 Windows,并且图标在示例中的路径下不可用。


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

以一种棘手的方式禁用 QCheckbox
Qt - 如何在保持选中状态的同时禁用 QCheckBox?

4

4 回答 4

24

按照下面我的代码:

this->ui->cb_RealWorld->setAttribute(Qt::WA_TransparentForMouseEvents);
this->ui->cb_RealWorld->setFocusPolicy(Qt::NoFocus);
于 2016-02-04T03:04:02.237 回答
10

这是 Devopia 作为函数的解决方案:

void SetReadOnly(QCheckBox* checkBox, bool readOnly)
{
   checkBox->setAttribute(Qt::WA_TransparentForMouseEvents, readOnly);
   checkBox->setFocusPolicy(readOnly ? Qt::NoFocus : Qt::StrongFocus);
}
于 2016-04-15T20:08:29.417 回答
1

在 Windows 上,请记住#include "windows.h"并设置如下标志:

this->ui->cb_RealWorld->setWindowFlags(this->ui->cb_RealWorld->windowFlags() | Qt::WindowTransparentForInput);
于 2019-10-28T12:02:40.917 回答
1

从 QCheckBox 继承并覆盖 nextCheckState 方法https://doc.qt.io/qt-5/qcheckbox.html#nextCheckState就可以了。

void ReadOnlyCheckBox::nextCheckState()
{

}
于 2020-12-20T20:06:18.800 回答