Qt, передать пользовательскую переменную между формами с сигналами и слотом в цикле for
Я хотел бы передать объект в другую форму после события, в этом случае нажатой кнопки я не могу использовать QSignalMapper, потому что это не int, строка или виджет. Сигналы и слоты являются для меня единственным решением, но я не знаю, как передать переменную vTest[i].
std::vector<Test * > vTest;
... fill vTest ...
for(int i = 0; i < vTest.size(); i++)
{
QPushButton * pButton = new QPushButton(vTest[i]->getTestName());
connect(pButton,SIGNAL(clicked(bool)),this,SLOT(slotGoNextPage(???)));
}
здесь происходит вызов слота функции slotGoNextPage
void slotGoNextPage(){
goNextPage(); }
...
void goNextPage(){
pForm->var = ?? // value which comes from vTest[i]
stackedWidget_page->setCurrentIndex(1);
}
И что я должен сделать, чтобы передать более одного параметра?
2 ответа
Если вы используете Qt5, вы можете использовать лямбду:
std::vector<Test * > vTest;
for(int i = 0; i < vTest.size(); i++) {
QPushButton * pButton = new QPushButton(vTest[i]->getTestName());
connect(pButton, &QPushButton::clicked, [=](){ this->goNextPage(vTest[i]); });
}
Конечно, это означает, что gonextPage()
придется принять в Test *
параметр:
void goNextPage(Test * t) {
pForm->var = t;
//...
}
Вам не нужен слот.
Вам нужно будет ввести def свой тип vtest (чтобы дать ему имя):
typedef std::vector<Test * > TestVect;
Затем вам нужно зарегистрировать этот тип в Qt используя:
qRegisterMetaType<TestVect>("TestVect");
Тогда вы можете использовать это в вашей связи
Кроме того, если я помню, вам нужно, чтобы ваши функции слота / сигнала принимали одинаковые параметры (вы не можете иметь разные параметры).