一、 常用的三个信号,{stateChanged(int) clicked() clicked(bool)}
在 Qt 中,QCheckBox 是一个提供复选框功能的小部件,允许用户选择和取消选择一个或多个选项。QCheckBox 提供了几种信号来响应用户的交互,其中 stateChanged(int), clicked(),和 clicked(bool) 是常用的。下面解释这些信号的意义及其用法。
1.stateChanged(int state)
这个信号在复选框的状态改变时发出。状态改变可以是用户交互(如点击复选框改变选中状态),或者是程序通过代码改变复选框状态时触发。
参数:
int state:表示复选框新的状态。它可以是以下值之一:
Qt::Unchecked (0):复选框未被选中。
Qt::PartiallyChecked (1):复选框处于部分选中状态(通常用于具有层级结构的复选框中,表示子项目部分被选中)。
Qt::Checked (2):复选框被完全选中。
用法示例:
connect(checkBox, &QCheckBox::stateChanged, this, [this](int state) {
if (state == Qt::Checked) {
qDebug() << "Checkbox is checked.";
} else if (state == Qt::Unchecked) {
qDebug() << "Checkbox is unchecked.";
}
});
2.clicked()
这个信号在复选框被点击时发出,不论状态如何改变。这个信号不带参数,主要用于简单的点击响应,而不关心具体的状态。
用法示例:
connect(checkBox, &QCheckBox::clicked, this, []() {
qDebug() << "Checkbox was clicked.";
});
3.clicked(bool checked)
这个信号也是在复选框被点击时发出,但它提供一个布尔参数来指示复选框的新状态。
参数:
bool checked:如果复选框现在是选中状态,则为 true;如果未选中,则为 false。
用法示例:
connect(checkBox, &QCheckBox::clicked, this, [](bool checked) {
if (checked) {
qDebug() << "Checkbox is now checked.";
} else {
qDebug() << "Checkbox is now unchecked.";
}
});
总结
- 使用 stateChanged(int) 时,可以精确到复选框的三种状态变化,适用于需要区分未选中、部分选中和完全选中状态的场景。
- 使用无参数的 clicked() 时,仅需要知道复选框被点击,而不关心其状态如何变化。
- 使用 clicked(bool) 时,可以直接获得复选框改变后的选中状态(是或否),适用于需要根据复选框的最新状态执行操作的场景。
这些信号为开发者提供了灵活的方式来处理用户与复选框的交互。
二、QCheckBox复选框状态设置、信号绑定
1.QCheckBox有两种设置状态
- 1.setCheckState(Qt::Checked);设置状态并且发送信号出去。
for (auto itr = m_mCheckBoxNum.begin(); itr != m_mCheckBox.end(); ++itr)
{
itr.value->setCheckState(Qt::Checked);
}
- setChecked(true);只设置状态不发送信号。
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);
}
2.QCheckBox使用clicked与stateChanged的注意事项
- 点击信号clicked
connect(ui->checkBox_Header, &QCheckBox::clicked, [=] ()
{
qDebug()<<"点击信号!";
});
- 状态改变信号stateChanged
connect(ckb, &QCheckBox::stateChanged, [=] ()
{
qDebug()<<"状态改变信号";
});
注意:当两个信号同时都绑定了相关的槽函数,点击选中框同时会触发点击信号(clicked)和状态改变信号(stateChanged)。设置状态改变信号不会触发点击信号。如果只是单纯的使用尽量可以使用点击信号,状态改变信号会产生不必要的逻辑错误。
三、QCheckBox获取当前状态,判断checkbox是否被勾选
使用isChecked()方法
举例:
首先UI设计师上要有这个checkbox的控件
if(ui->checkbox->isChecked()==true)
{
startTimer(1000);
}
当被勾选后,isChecked() 等于true 。
原文链接:
1.【QT】关于qcheckbox常用的三个信号,{sstateChanged(int) clicked() clicked(bool)}达成巧用