QT的连接函数问题

大一的期末作业,我知道写的很烂,学艺不精求轻喷。

这个函数大体就是执行的时候给数据表(每行)添加两个按钮,其中按钮的指针使用一个二维数组test[i][0]或者[i][1]储存,等用户手动按对应行数的按钮时,执行lamdba表达式的内容,程序确实跑起来了,功能也没有问题,但是我搞不懂为什么我点击对应行数的按钮可以确定connect函数中test[i][1或0]的i的值?如果connect函数不能被for主动执行的话,i的值应该停留在for的最后一个循环上,但是我运行的时候所有的按钮都能触发对应的指针。难道是点击按钮的时候会自动触发一次for循环来查找i的值?但是我用qdebug试了发现并没有,只要点击按钮,就可以找到对应的行数,而不需要遍历查找i的值。我不理解,希望有懂得dalao解答

math

qt5·c++
154 views
Comments
登录后评论
Sign In
·
int comd = 0;
	//更新预期
	QPushButton* test[1000][2];	//以后会通过迭代器(vector),存储指针
    int i = 1;
	for (i; i <= ScoreDataNum; i++)									    //循环名单个数  (该数组1开始,所以对应下标和列表行数相同)
	{
		QPushButton* rebt = new QPushButton(" ");								//创建按钮指针
		QPushButton* dlbt = new QPushButton(" ");
		dlbt->setStyleSheet(QString::fromUtf8("border-image: url(:/StudentScoreManageSys/img/closeButton.png);"));//按钮图标
		rebt->setStyleSheet(QString::fromUtf8("border-image: url(:/StudentScoreManageSys/img/ResetBtn.png);"));//按钮图标
		test[i][0] = rebt;
		test[i][1] = dlbt;															//将创建的指针存入迭代器,起到保存的作用
		ui.list->setCellWidget(i - 1, 3, rebt);										//存入单元格中
		ui.list->setCellWidget(i - 1, 4, dlbt);
		connect(test[i][1], &QPushButton::clicked, this, [=]() mutable {
			qDebug() << "我是" << i;
			GetComdInfo(i - 1, ui.comboBox->currentText()); 	//参数 : 当前按纽,当前下拉栏文本。获取当前选中的行信息
			DeleteWindow.getOnlineAcc(OnlineAcc);
			DeleteWindow.SetUi(SubName, Score, Date,Edulevel,ROWID);			//参数 : 科目名称 成绩 日期,学历,行id。
			DeleteWindow.show(); 
			});                        //对应的指针作为信号


		connect(test[i][0], &QPushButton::clicked, this, [=]() mutable {
			GetComdInfo(i - 1, ui.comboBox->currentText());	 //参数 : 当前按纽,当前下拉栏文本   ,执行后,该文件内的信息全部为选中行的
			qDebug() <<"我是传入的onlin'" << OnlineAcc;
			NewScoreIn.getOnLineAcc(OnlineAcc);
			qDebug() << "我是传入的edu'" << Edulevel;
			NewScoreIn.getEdu(Edulevel);
			qDebug() << "我是传入的row'" <<ROWID;
			NewScoreIn.getRowID(ROWID);
			NewScoreIn.show();
			//DeleteWindow.getOnlineAcc(OnlineAcc);
			//DeleteWindow.SetUi(SubName, Score, Date, Edulevel, ROWID);			//参数 : 科目名称 成绩 日期,学历,行id。
			//DeleteWindow.show();
			});
		//connect(test[i][1]);

	}
·

具体一点的话,是这里

connect(test[i][1], &QPushButton::clicked, this, [=]() mutable {
			qDebug() << "我是" << i;
			GetComdInfo(i - 1, ui.comboBox->currentText()); 	//参数 : 当前按纽,当前下拉栏文本。获取当前选中的行信息
			DeleteWindow.getOnlineAcc(OnlineAcc);
			DeleteWindow.SetUi(SubName, Score, Date,Edulevel,ROWID);			//参数 : 科目名称 成绩 日期,学历,行id。
			DeleteWindow.show(); 
			});      
·

也许之前演示的不是很清楚,可以看看这张图,我依次点击后,都可以找到对应的行数,但是根据上面的debug可以看到for只循环了三次,所以i=3(数组从1开始存),那么connect的信号发射方应该是test[3][1],只有点击第三行的按钮,但是我点击1、2行依然可以正确的执行,我不知道为什么