이것에 대해 몇 가지 비슷한 질문을 발견했으나 슬롯 핸들러에서 메시지 상자를 사용하는 경우를 나타냅니다. 내 경우에는 슬롯 핸들러가 아무 것도하지 않아도 editFinished 신호가 두 번 나오기 때문에 조금 붙어있다.Qt : QLine 편집 편집 포커스가 변경되면 신호가 두 번 완료 되었습니까?
테스트를 위해 signalMapper를 사용하여 editingFinished() 신호를 단일 슬롯에 연결하는 QLineEdit 배열이 있습니다. 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를 호출 초점을 잃고있는 상자의 색인과 초점을 가져 오는 상자로 두 번째.
그럼 내 질문 : 뭔가 빠졌습니까? 이 예상되는 동작이나 버그입니까? 버그가있는 경우,이 신호를 사용하여 입력시 데이터에 대한 사용자 정의 유효성 검사를 수행하려는 경우 (반환, 탭 또는 마우스를 클릭하여 포커스 변경)
Toby, Qt의 신호 슬롯 메커니즘은 씨름하는 재미있는 짐승이 될 수 있습니다. 행동에 직면하게되는 조건은 무엇입니까? (나는.디버깅하지 않고 디버깅하지 않고 두 번 결과가 발생하는 디버거에서) – Lightheart