我发现了一些类似的问题,但这些似乎指的是在插槽处理程序中使用消息框的情况。在我的情况下,我有点卡住,因为即使我的插槽处理程序没有任何操作,我也会得到两次editFinished信号。Qt:改变焦点时QLineEdit编辑完成信号两次?
对于测试,我有一个QLineEdit数组,它使用signalMapper将editingFinished()信号连接到一个插槽。 signalMapper传递数组索引,所以我可以看到信号来自哪里。 如:
testenter::testenter(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::testenter)
{
// setup the UI according to the .h file
ui->setupUi(this);
signalMapper = new QSignalMapper(this);
// init the labels and edit boxes
for (int i = 0; i < 10; i++)
{
pm_label[i] = new QLabel(ui->scrollArea);
QString text = QString("Number %1").arg(i);
pm_label[i]->setText(text);
pm_label[i]->setGeometry(10,20+i*30, 50, 20);
pm_label[i]->show();
pm_editBox[i] = new QLineEdit(ui->scrollArea);
pm_editBox[i]->setGeometry(80,20+i*30, 50, 20);
pm_editBox[i]->show();
signalMapper->setMapping(pm_editBox[i], int(i));
connect(pm_editBox[i], SIGNAL(editingFinished()), signalMapper, SLOT(map()));
}
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(data_entry(int)));
}
void testenter::data_entry(int entry)
{
//dummy
}
当在调试器中运行,如果我将数据输入到一个框,然后要么回车,或用鼠标选择(即改变焦点)另一个盒子,然后调用data_entry两次,第一次用失去焦点的盒子的索引以及获得焦点的盒子的第二次。
所以我的问题:我错过了什么?这是预期的行为还是错误? 如果有错误,任何人都知道方法,因为我想用这个信号在输入数据时进行自定义验证(通过返回,标签或鼠标单击来改变焦点)。
托比,Qt的信号插槽机制可以是一个有趣的野兽来搏斗。你遇到这种行为的条件是什么? (一世。e在一个带有中断点的调试器中,运行时没有进行调试并且出现了两次结果) – Lightheart 2014-11-06 18:18:38