Qt,在for循环中的带有信号的窗体和插槽之间传递自定义变量
我想在事件之后将一个对象传递给另一个窗体,在本例中是一个按下的按钮 我不能使用QSignalMapper,因为它不是int、字符串或小部件。 信号和插槽对我来说是唯一的解决方案,但我不知道如何传递vTest[I]变量Qt,在for循环中的带有信号的窗体和插槽之间传递自定义变量,qt,variables,parameters,signals,connect,Qt,Variables,Parameters,Signals,Connect,我想在事件之后将一个对象传递给另一个窗体,在本例中是一个按下的按钮 我不能使用QSignalMapper,因为它不是int、字符串或小部件。 信号和插槽对我来说是唯一的解决方案,但我不知道如何传递vTest[I]变量 std::vector<Test * > vTest; ... fill vTest ... for(int i = 0; i < vTest.size(); i++) { QPushButton * pButton = new QPushButton(vTe
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(???)));
}
我应该怎么做才能传递多个参数?您需要键入def您的vtest类型(给它一个名称):
typedef std::vector TestVect;
然后,您需要使用以下命令向Qt注册此类型:
qRegisterMetaType<TestVect>("TestVect");
qRegisterMetaType(“TestVect”);
然后你可以在你的连接中使用它
另外,如果我记得的话,您需要让插槽/信号函数采用相同的参数(不能有不同的参数)。如果您使用的是Qt5,您可以使用lambda:
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]); });
}
您不需要插槽。看起来他需要通过
测试*
,而不是向量本身。啊,好的,谢谢。如果是这种情况,您不需要执行typedef,但仍然需要向元编译器注册“Test”——这是最重要的部分:)是的,我必须通过Test*。谢谢你的建议!
qRegisterMetaType<TestVect>("TestVect");
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]); });
}
void goNextPage(Test * t) {
pForm->var = t;
//...
}