我有一個帶參數的函數列表。對於每個參數,我都會創建一個保持其值的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 *'。這應該是''。我也修復了答案。 –