我有一个带参数的函数列表。对于每个参数,我都会创建一个保持其值的spinbox。一些函数具有零参数,其他函数具有n> 1个参数。Qt - 动态创建窗口小部件的连接信号
的代码看起来像这样(简体)
for (int i = 0; i < parameterList.size(); ++i) {
QString valueName = parameterList().at(i);
double value = parameter(valueName);
QDoubleSpinBox * spinbox = new QDoubleSpinBox();
QLabel * label = new QLabel();
label->setText(valueName);
spinbox->setValue(value);
// does NOT work, Slot need three parameters!
QObject::connect(spinbox, &QDoubleSpinBox::valueChanged,
this, &OnAmplitudeParameterChanged);
... add widgets to layout
}
然而插槽需要知道哪些部件是调用,参数名称和值。然而,信号仅提供了一个值。
插槽看起来像这样
OnAmplitudeParameterChanged(int index, QString name, double value)
这是怎么解决的Qt中?我找到了一个QSignalMapper类,但没有解决我的问题。
它不编译'QDoubleSpinBox *纺纱器= qobject_cast(的QObject ::发送者());'给我的错误'错误:不能在initialization' –
@MatthiasPospiech糟糕 'QDoubleSpinBox' 转换为 'QDoubleSpinBox *'。这应该是''。我也修复了答案。 –