Qcheckbox минимум одна опция всегда проверяется в QT -c ++ - PullRequest
1 голос
/ 04 февраля 2020

У меня есть приложение QT с qcheckboxes. Я хотел бы добиться, чтобы один флажок всегда был отмечен, и я могу проверить столько, сколько я хочу, но один всегда должен быть отмечен. Как я могу это сделать?

1 Ответ

2 голосов
/ 04 февраля 2020

Вероятно, есть более элегантный способ сделать это, но я бы предложил просто использовать сигналы.

Где-то, вероятно, конструктор, вы бы подключили сигнал

connect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );

Затем, в функции, к которой вы его подключили, просто проверьте, проверено ли что-то еще. Для этого я использовал переменную с именем total_checked.

void Test::onCheckboxOne( bool checked ) {
    disconnect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
    if ( !checked ) {
        if ( total_checked == 1 )
            this->chkOne->setCheckState( Qt::Checked );
        else
            --total_checked;
    } else {
        ++total_checked;
    }
    connect( chkOne, &QCheckBox::toggled, this, &Test::onCheckboxOne );
}

. Это станет непрактичным, если у вас много флажков, если (если не выбраны) вы не хотите задавать c набор флажков. , в этом случае вышеупомянутый будет обработчик для всех сигналов флажка.

...