如何验证是否选中了多个复选框

时间:2014-09-04 10:58:27

标签: c++ qt checkbox ischecked

std::string output; 

if ((checkbox1->isChecked() && checkbox2->isChecked()) && 
   (!checkbox3->isChecked() || !checkbox4->isChecked() || !checkbox5->isChecked() || !checkbox6->isChecked()))
{
  output = " Using Checkbox: 1, 2 ";
}

if ((checkbox1->isChecked() && checkbox2->isChecked() && checkbox3->isChecked()) && 
   (!checkbox4->isChecked() || !checkbox5->isChecked() || !checkbox6->isChecked()))
{
  output = " Using Checkbox: 1, 2, 3 ";
}

....

使用QT创建者如何验证已检查了多少个复选框并相应地更改输出字符串? 由于我与所有那些NOT AND OR混淆,因此多个if语句无法正常工作。 编码所有可能性需要很长时间。

4 个答案:

答案 0 :(得分:13)

您的所有checkBoxes都应该在groupBox

试试这个:

QList<QCheckBox *> allButtons = ui->groupBox->findChildren<QCheckBox *>();
qDebug() <<allButtons.size();
for(int i = 0; i < allButtons.size(); ++i)
{
    if(allButtons.at(i)->isChecked())
        qDebug() << "Use" << allButtons.at(i)->text()<< i;//or what you need
}

答案 1 :(得分:2)

使用像这样的复选框数组

// h-file
#include <vector>
class MyForm {
...
    std::vector< QCheckBox* > m_checkBoxes;
};
// cpp-file
MyForm::MyForm() {
...
    m_checkBoxes.push_back( checkbox1 );
    m_checkBoxes.push_back( checkbox2 );
    ... 
    m_checkBoxes.push_back( checkbox5 );
}
...
    output = " Using Checkbox:";
    for ( int i = 0, size = m_checkBoxes.size(); i < size; ++i ) {
        if ( m_checkBoxes[ i ]->isChecked() ) {
            output += std::to_string( i + 1 ) + ", ";
        }
    }

答案 2 :(得分:1)

TLDR:将它们放在一个容器中,并通过迭代来构建你的字符串。

代码:

// line taken from @Chernobyl
QList<QCheckBox *> allButtons = ui->groupBox->findChildren<QCheckBox *>();

auto index = 1;
std::ostringstream outputBuffer;
outputBuffer << "Using Checkbox: ";
for(const auto checkBox: allButtons)
{
    if(checkBox->isChecked())
        outputBuffer << index << ", ";
    ++index;
}
auto output = outputBuffer.str();

答案 3 :(得分:0)

使用QString代替std::string,然后使用:

QCheckBox* checkboxes[6];
checkbox[0] = checkbox1;
checkbox[1] = checkbox2;
checkbox[2] = checkbox3;
checkbox[3] = checkbox4;
checkbox[4] = checkbox5;
checkbox[5] = checkbox6;

QStringList usedCheckboxes;
for (int i = 0; i < 6; i++)
{
    if (checkbox[i]->isChecked())
        usedCheckboxes << QString::number(i+1);
}

QString output = " Using Checkbox: " + usedCheckboxes.join(", ") + " ";

这只是一个例子,但有很多方法可以实现这一点。您可以将复选框保留在QList这是一个类字段中,这样您就不必每次都“构建”checkboxes数组。在构建输出等时,您也可以使用QString::arg()而不是+运算符作为字符串。

我提出的只是一个简单的例子。