QCheckBox управление поведением при Qt::PartiallyChecked
Имеется таблица с QCheckBox в первом столбце. В ней могут быть неактивные строки, где галочку в QCheckBox поставить нельзя.
Состояние QCheckBox на -1 позиции рассчитывается программно. И может быть установлена в Qt::PartiallyChecked.
Дальнейшие клики устанавливают это значение в Qt::Checked, а код, имея неактивные строки снова меняет его в Qt::PartiallyChecked. И так по кругу. То есть, снять галочку можно только при всех активных строках. Только на этом основании значение может быть установлено в Qt::Checked, а следующий клик поменяет его на Qt::Unchecked.
Как реализовать смену Qt::PartiallyChecked на Qt::Unchecked при клике? Например, запретить Qt менять значение и делать это программно по событию QCheckBox::clicked.
Ответы (1 шт):
Извините за задержку, понятия не имею, зачем Вам это надо, но
для изменения порядка состояний нужно реализовать класс, назовем его InvertedCheckBox, и переопределить метод nextCheckState, например:
void InvertedCheckBox::nextCheckState()
{
if (!isTristate())
return;
if (checkState() == Qt::PartiallyChecked) {
setCheckState(Qt::Unchecked);
} else if (checkState() == Qt::Unchecked) {
setCheckState(Qt::Checked);
} else if (Qt::Checked) {
setCheckState(Qt::PartiallyChecked);
}
}
Класс:
class InvertedCheckBox : public QCheckBox
{
Q_OBJECT
public:
InvertedCheckBox(QWidget *parent = nullptr);
protected:
virtual void nextCheckState() override;
};
Конструктор:
InvertedCheckBox::InvertedCheckBox(QWidget *parent)
{
}