我建立一套QCheckBox的动态基于像这样一些用户输入:引发一个信号当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被选中时才会接收信号;这意味着如果您检查一次,然后取消检查它不应发出或接收信号。不知道最好的方法是什么。 任何想法?
你能澄清哪个事件应该发出信号?当checckboxes被选中时,而不是当他们没有被选中时?一种方法应该是对复选框进行子类化。添加一个专用插槽,发出用户定义的信号,该信号仅在适当的时候被命名。 – user2672165
对,只有在检查时才会发出信号。所以如果我有3个QcheckBox:C1,C2和C3;并且用户检查C1和C2,但是然后取消选中C2,只发出C1的信号。不知道我是否有任何意义:) – user1981855
然后只有我知道(QSignalMapper不是很熟悉)的方法是,每当它们中的任何一个改变状态时都会通过所有复选框。然后你可以在子类复选框中有一个公共的功能,如果你选中的话,你可以发出它。你也可以给自己的对象添加一个信号,它可以发出一个只包含选中对象的列表。 – user2672165