要获取 QTableWidget 上按下按钮的当前行,可以使用 QSignalMapper 类来实现。\n\n首先,创建一个 QSignalMapper 对象,并连接它的 mapped(int) 信号到一个槽函数。这个槽函数会传递一个整数参数,表示被点击按钮所在的行号。\n\n然后,为每个按钮设置一个唯一的对象名称,并连接它们的 clicked() 信号到 QSignalMapper 的 map() 方法。将按钮对象作为参数传递给 map() 方法,并为每个按钮设置一个整数值,表示它所在的行号。\n\n最后,在槽函数中获取传递的行号参数,即可得到被点击按钮所在的当前行。\n\n以下是一个示例代码:\n\ncpp\n#include <QtWidgets>\n\nint main(int argc, char *argv[]) {\n QApplication app(argc, argv);\n\n QTableWidget tableWidget(3, 2);\n tableWidget.setEditTriggers(QAbstractItemView::NoEditTriggers);\n\n QPushButton *button1 = new QPushButton("Button 1");\n button1->setObjectName("button1");\n QPushButton *button2 = new QPushButton("Button 2");\n button2->setObjectName("button2");\n QPushButton *button3 = new QPushButton("Button 3");\n button3->setObjectName("button3");\n\n tableWidget.setCellWidget(0, 0, button1);\n tableWidget.setCellWidget(1, 0, button2);\n tableWidget.setCellWidget(2, 0, button3);\n\n QSignalMapper signalMapper;\n QObject::connect(&signalMapper, SIGNAL(mapped(int)), &tableWidget, SLOT(getCurrentRow(int)));\n\n signalMapper.setMapping(button1, 0);\n signalMapper.setMapping(button2, 1);\n signalMapper.setMapping(button3, 2);\n\n QObject::connect(button1, SIGNAL(clicked()), &signalMapper, SLOT(map()));\n QObject::connect(button2, SIGNAL(clicked()), &signalMapper, SLOT(map()));\n QObject::connect(button3, SIGNAL(clicked()), &signalMapper, SLOT(map()));\n\n tableWidget.show();\n\n return app.exec();\n}\n\n\n在这个示例中,我们创建了一个 3x2 的 QTableWidget,并在每个单元格中放置了一个 QPushButton。然后,我们使用 QSignalMapper 来连接每个按钮的 clicked() 信号,并为每个按钮设置一个唯一的整数值表示它所在的行号。最后,我们在槽函数 getCurrentRow(int) 中获取传递的行号参数,即可得到被点击按钮所在的当前行。


原文地址: https://www.cveoy.top/t/topic/pDWF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录