gpt4 book ai didi

c++ - 仅当 QCheckBox 被选中时才发出信号

转载 作者:搜寻专家 更新时间:2023-10-31 00:15:35 29 4
gpt4 key购买 nike

我正在根据一些用户输入动态创建一组 QCheckBox,如下所示:

QWidget *wid = new QWidget();
QVBoxLayout *layout = new QVBoxLayout();
for(int i=0; i<NumberModes; i++)
{
int k = Amplitudes(i,0);
int m = Amplitudes(i,1);

QString ks = QString::number(k);
QString ms = QString::number(m);
QString position = QString::number(i);
QString mode = "A"+ks+ms;

QCheckBox *check = new QCheckBox(mode);
connect(check, SIGNAL(toggled(bool)), &mapper, SLOT(map()));
connect(check, SIGNAL(toggled(bool)), &SelectModes, SLOT(map()));

mapper.setMapping(check,position);
SelectModes.setMapping(check,mode);
layout->addWidget(check);
updateGeometry();
}


wid->setLayout(layout);
ui->scrollArea->setWidget(wid);

然后 QSignalMapper 连接到另一个执行一些计算的类:

connect(&SelectModes, SIGNAL(mapped(QString)), this, SIGNAL(CheckBoxClicked2(QString)));
connect(this, SIGNAL(CheckBoxClicked2(QString)), &Supress2, SLOT(ListenSelectedModes(QString)));
connect(&mapper, SIGNAL(mapped(QString)), this, SIGNAL(CheckBoxClicked(QString)));
connect(this, SIGNAL(CheckBoxClicked(QString)), &Suppress, SLOT(ListenSelectedModes(QString)));

我需要的是类仅在 QCheckBox 被选中时接收信号;这意味着如果您检查一次,然后取消检查,则不应发出或接收任何信号。不确定最好的方法是什么。有什么想法吗?

最佳答案

使用 C++11,无需 QSignalMapper 即可轻松实现。这是一个工作示例。

#include <QWidget>
#include <QCheckBox>
#include <QVBoxLayout>

class QCheckBox;

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);

signals:
void checkBoxChecked(QCheckBox *checkBox);
};


Widget::Widget(QWidget *parent) :
QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout;

for (int i = 0; i < 10; ++i) {
QCheckBox *checkBox = new QCheckBox("CheckBox " + QString::number(i + 1));

connect(checkBox, &QCheckBox::toggled, [=](bool checked) {
if (checked)
emit checkBoxChecked(checkBox);
});

layout->addWidget(checkBox);
}

setLayout(layout);
}

关于c++ - 仅当 QCheckBox 被选中时才发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18990515/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com