我有QList
的QPushButton
和QSignalMapper
來識別哪個按鈕被按下。 所以我做類似的東西(我的項目是非常大的,所以我切需要的問題只是線)如何根據QSignalMapper獲取QList的索引
QList<QPushButton*> Buttons;
QList <QLabel*> LabelList1;
QList <QLabel*> LabelList2;
QList <QLabel*> LabelList3;
QList <QLabel*> LabelList4;
QSignalMapper *ButtonsMapper;
ButtonsMapper= new QSignalMapper(this);
connect(ButtonsMapper, SIGNAL(mapped(int)),this,SIGNAL(ButtonsClicked(int)));
connect(this, SIGNAL(ButtonsClicked(int)),this,SLOT(deleteButton(int)));
Buttons.append(new QPushButton(tr("0")));//first button
LabelList1.append(new QLabel(tr("0")));
LabelList2.append(new QLabel(tr("0")));
LabelList3.append(new QLabel(tr("0")));
LabelList4.append(new QLabel(tr("0")));
QPushButton * pb1 = Buttons.last();//pointer to the last button
connect(pb1, SIGNAL(clicked()), ButtonsMapper, SLOT(map()));
ButtonsMapper->setMapping(pb1,0);
Buttons.append(new QPushButton(tr("1")));//second button
LabelList1.append(new QLabel(tr("1")));
LabelList2.append(new QLabel(tr("1")));
LabelList3.append(new QLabel(tr("1")));
LabelList4.append(new QLabel(tr("1")));
QPushButton * pb2 = Buttons.last();//pointer to the last button
connect(pb2, SIGNAL(clicked()), ButtonsMapper, SLOT(map()));
ButtonsMapper->setMapping(pb2,1);
,並應該刪除按鈕被按下的功能deleteButton
。如果我做這樣的事情
void myclass::deleteButton(int i){
delete (Buttons.takeAt(i));
delete (LabelList1.takeAt(i));
delete (LabelList2.takeAt(i));
delete(LabelList3.takeAt(i));
delete(LabelList4.takeAt(i));
}
該功能可導致index out of range
錯誤,如果我刪除了第一個按鈕,然後我按下第二個按鈕,功能Buttons.takeAt(i)
點不存在按鈕。
我認爲最好的變種 –
它的好,如果我有1 QList,但我至少有8 QList,我應該刪除evrytime ... –