Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt,在for循环中的带有信号的窗体和插槽之间传递自定义变量_Qt_Variables_Parameters_Signals_Connect - Fatal编程技术网

Qt,在for循环中的带有信号的窗体和插槽之间传递自定义变量

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

我想在事件之后将一个对象传递给另一个窗体,在本例中是一个按下的按钮 我不能使用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(???)));       
}

我应该怎么做才能传递多个参数?

您需要键入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;
    //...
}