是否可以从每个旋转框中获取值列表并将它们放入列表中?
for (int i = 0; i < norm_size+1; i++){
getSpinleftValue(i);
}
我使用for循环来设置所有连接
.
void GuiTest::getSpinleftValue(int index){
QSpinBox* spinleft[norm_size+1] = {ui->norm_spinBox_9,
ui->norm_spinBox_10,
ui->norm_spinBox_11,
ui->norm_spinBox_12,
ui->norm_spinBox_13,
ui->norm_spinBox_14,
ui->norm_spinBox_15,
ui->norm_spinBox_16};
QObject::connect(spinleft[index], SIGNAL(valueChanged(int)), this, SLOT(spinboxWrite(int, index)));
}
.
然后,一旦通过for循环建立连接,我想将它们的输出写入一个列表以便稍后使用。
.
void GuiTest::spinboxWrite(int arg1, int index){
int norm_list[16];
qDebug() << arg1;
qDebug() << index;
}
在这种情况下,我正在使用一些调试功能,所以我可以看看它们是否正常工作。现在它看起来不像它正在工作,因为我没有正确地写“连接”部分。
No such slot GuiTest::spinboxWrite(int, index) in
我知道另一种解决方案是创建一堆这些
void GuiTest::on_norm_spinBox_9_valueChanged(int arg1)
{
//code here
}
但如果我能提供帮助,我宁愿不用 16 来污染我的整个文件!
答案 0 :(得分:1)
信号valueChanged(int)
和您的广告位spinboxWrite(int, index)
(请注意索引在您的情况下甚至不是类型!)没有匹配的签名,因此connect
无法工作。来自docs:
传递给SIGNAL()宏的签名的参数必须少于传递给SLOT()宏的签名。
我认为解决问题的最简单方法是将所有旋转框中的valueChanged(int)
信号连接到同一个插槽,并使用sender
获取已更改的旋转框,这是如何在构造函数中执行此操作:
GuiTest::GuiTest(QWidget* parent)/*do you initializations*/{
//after setup ui, create your spin boxes. . .
//get list of all children spin boxes
//(you can replace that with a hard coded list if it is
//not applicable)
QList<QSpinBox*> spinBoxes= findChildren<QSpinBox*>();
//connect the signal from all spin boxes to the slot
QSpinBox* spinBox;
foreach(spinBox, spinBoxes)
connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(SpinBoxChanged(int)));
}
以下是您的spinboxWrite
广告位的样子:
void GuiTest::SpinBoxChanged(int value){
QSpinBox* sp= qobject_cast<QSpinBox*>(sender());
//now sp is a pointer to the QSpinBox that emitted the valueChanged signal
//and value is its value after the change
//do whatever you want to do with them here. . .
}