一、QCheckBox有两种设置状态
1.setCheckState(Qt::Checked);设置状态并且发送信号出去。
eg:
for (auto itr = m_mCheckBoxNum.begin(); itr != m_mCheckBox.end(); ++itr)
{
itr.value->setCheckState(Qt::Checked);
}
2.setChecked(true);只设置状态不发送信号。
eg:
int nCheckBoxCount = 0;
for (auto itr = m_mCheckBoxNum.begin(); itr != m_mCheckBox.end(); ++itr)
{
if (itr.value()->isChecked())
{
++nCheckBoxCount;
}
}
if (nCheckBoxCount == m_mCheckBoxNum.size())
{
ui->checkBox_HeaderTitle->setChecked(true);
}
else
{
ui->checkBox_HeaderTitle->setChecked(false);
}
二、QCheckBox有两种信号
1.点击信号clicked
connect(ui->checkBox_Header, &QCheckBox::clicked, [=] ()
{
qDebug()<<"点击信号!";
});
2.状态改变信号stateChanged
connect(ckb, &QCheckBox::stateChanged, [=] ()
{
qDebug()<<"状态改变信号";
});
注意:当两个信号同时都绑定了相关的槽函数,点击选中框同时会触发点击信号(clicked)和状态改变信号(stateChanged)。设置状态改变信号不会触发点击信号。如果只是单纯的使用尽量可以使用点击信号,状态改变信号会产生不必要的逻辑错误。
为了方便大家更好地理解,我将运行例子和运行结果给大家贴出
connect(ui->checkBox,&QCheckBox::clicked,[=]()
{
qDebug()<<"QCheckBox clicked signal!";
});
connect(ui->checkBox,&QCheckBox::stateChanged,[=]()
{
qDebug()<<"QCheckBox stateChanged signal!";
});
connect(ui->pushButton,&QPushButton::clicked,[=](bool state)
{
if(state)
{
ui->checkBox->setCheckState(Qt::Checked);
}
else
{
ui->checkBox->setCheckState(Qt::Unchecked);
}
qDebug()<<"QPushButton clicked signal!";
});
点击pushbutton输出结果如下