首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Checkbox更改其他checkbox语句

Checkbox更改其他checkbox语句
EN

Stack Overflow用户
提问于 2017-02-09 16:35:41
回答 3查看 736关注 0票数 2

我需要连接一些复选框,所以当我单击一个复选框时,它将变为选中状态,而其他复选框将变为未选中状态。我现在的代码是这样的。

在类构造函数中连接:

代码语言:javascript
复制
connect(cb_thickness1,SIGNAL(stateChanged(int)),this,SLOT(cb_thickness1_isChecked()));
connect(cb_thickness2,SIGNAL(stateChanged(int)),this,SLOT(cb_thickness2_isChecked()));
connect(cb_thickness3,SIGNAL(stateChanged(int)),this,SLOT(cb_thickness3_isChecked()));

和插槽

代码语言:javascript
复制
void MainWind::cb_thickness1_isChecked()
{
    if(cb_thickness2->isChecked())
        cb_thickness2->setChecked(false);
    if(cb_thickness3->isChecked())
        cb_thickness3->setChecked(false);
}
void MainWind::cb_thickness2_isChecked()
{
    if(cb_thickness1->isChecked())
        cb_thickness1->setChecked(false);
    if(cb_thickness3->isChecked())
        cb_thickness3->setChecked(false);

}
void MainWind::cb_thickness3_isChecked()
{
    if(cb_thickness1->isChecked())
        cb_thickness1->setChecked(false);
    if(cb_thickness2->isChecked())
        cb_thickness2->setChecked(false);

}

代码没有像预期的那样工作。当我第一次点击任何ChBx时,一切都是正常的,但当我下次点击其他时,它只会取消选中上一次,并且不会对自己做任何事情。只有在第二次点击时,它才会被选中。

此外,我还发现了另一个错误,当我检查ChBox,然后通过单击它取消选择它,我可以检查2 ChBxes。图2

EN

回答 3

Stack Overflow用户

发布于 2017-02-09 17:09:39

单选按钮是个好主意。

但是如果你真的想使用复选框,你可以在cb_thickness1_isChecked()中显式地设置cb_thickness1 checked,并对其他两个复选框执行相同的操作。

代码语言:javascript
复制
void MainWind::cb_thickness1_isChecked()
{
    cb_thickness1->setChecked(true);
    cb_thickness2->setChecked(false);
    cb_thickness3->setChecked(false);
}
void MainWind::cb_thickness2_isChecked()
{
    cb_thickness1->setChecked(false);
    cb_thickness2->setChecked(true);
    cb_thickness3->setChecked(false);
}
void MainWind::cb_thickness3_isChecked()
{
    cb_thickness1->setChecked(false);
    cb_thickness2->setChecked(false);
    cb_thickness3->setChecked(true);
}
票数 1
EN

Stack Overflow用户

发布于 2017-02-09 21:17:13

我建议从QCheckBox派生一个类(让我们称其为CustomCheckBox),并添加一个信号私有插槽公共插槽

信号:

代码语言:javascript
复制
void enabled();

专用插槽:

代码语言:javascript
复制
void CustomCheckBox::checkEnable(bool state)
{
    if(state)
    {
        emit enabled();
    }
}

公共插槽:

代码语言:javascript
复制
void CustomCheckBox::uncheck()
{
    setChecked(false);
}

在构造函数中添加:

代码语言:javascript
复制
connect(this,SIGNAL(toggled(bool)),this,SLOT(checkEnable(bool)));

这样,您就可以使用简单的连接。

代码语言:javascript
复制
CustomCheckBox *box1 = new CustomCheckBox();
CustomCheckBox *box2 = new CustomCheckBox();

connect(box1,SIGNAL(enabled()),box2,SLOT(uncheck()));

请随时改进这个答案。:)

票数 0
EN

Stack Overflow用户

发布于 2017-02-09 22:57:02

确认该按钮的状态在插槽中处于选中状态,然后像您已经做的那样取消激活其他复选框。您可以通过将stateChanged方法的参数传递给插槽来使用该参数。

以下是可以工作的代码:变体I:

代码语言:javascript
复制
connect(ui->checkBoxA, SIGNAL(stateChanged(int)), this, SLOT(checkBoxAChanged(int)));
connect(ui->checkBoxB, SIGNAL(stateChanged(int)), this, SLOT(checkBoxBChanged(int)));
connect(ui->checkBoxC, SIGNAL(stateChanged(int)), this, SLOT(checkBoxCChanged(int)));

void MainWindow::checkBoxAChanged(int state)
{
if (state == Qt::Checked) {
    ui->checkBoxB->setChecked(false);
    ui->checkBoxC->setChecked(false);
}
}

void MainWindow::checkBoxBChanged(int state)
{
if (state == Qt::Checked) {
    ui->checkBoxA->setChecked(false);
    ui->checkBoxC->setChecked(false);
}
}

void MainWindow::checkBoxCChanged(int state)
{
if (state == Qt::Checked) {
    ui->checkBoxB->setChecked(false);
    ui->checkBoxA->setChecked(false);
}
}

变体II:

代码语言:javascript
复制
connect(ui->checkBoxA, SIGNAL(clicked(bool)), this, SLOT(checkBoxAClicked(bool)));
connect(ui->checkBoxB, SIGNAL(clicked(bool)), this, SLOT(checkBoxBClicked(bool)));
connect(ui->checkBoxC, SIGNAL(clicked(bool)), this, SLOT(checkBoxCClicked(bool)));

void MainWindow::checkBoxAClicked(bool val)
{
if (val == true) {
    ui->checkBoxB->setChecked(false);
    ui->checkBoxC->setChecked(false);
}
}

void MainWindow::checkBoxBClicked(bool val)
{
if (val == true) {
    ui->checkBoxA->setChecked(false);
    ui->checkBoxC->setChecked(false);
}
}

void MainWindow::checkBoxCClicked(bool val)
{
if (val == true) {
    ui->checkBoxB->setChecked(false);
    ui->checkBoxA->setChecked(false);
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42131687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档