C++ 连接2 QTableWidget中的行选择
我正在尝试从两个QTableWidget连接行选择。 我的意思是,当我在表1中选择一行时,我希望我的程序选择表2中的同一行。这两个表的列数不相同,因此我不能只为第一个表选择一个项目,而在第二个表中选择相同的项目。 我尝试使用以下方法但未成功:C++ 连接2 QTableWidget中的行选择,c++,qt,qt5,selection,qtablewidget,C++,Qt,Qt5,Selection,Qtablewidget,我正在尝试从两个QTableWidget连接行选择。 我的意思是,当我在表1中选择一行时,我希望我的程序选择表2中的同一行。这两个表的列数不相同,因此我不能只为第一个表选择一个项目,而在第二个表中选择相同的项目。 我尝试使用以下方法但未成功: connect(ui->table1->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), ui->table2->selectionMode
connect(ui->table1->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), ui->table2->selectionModel(), SLOT(setCurrentIndex(QModelIndex)));
上面写着:
QObject::connect: No such slot QItemSelectionModel::setCurrentIndex(QModelIndex)
您知道出了什么问题吗?问题的原因是
setCurrentIndex()
有两个参数,而不仅仅是一个,加上签名不匹配。因此,在这些情况下,您应该使用lambda并使用selectRow()
:
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
auto*table1=新的QTableWidget(4,3);
表1->setSelectionBehavior(QAbstractItemView::SelectRows);
auto table2=新的QTableWidget(4,4);
表2->setSelectionBehavior(QAbstractItemView::SelectRows);
QObject::connect(表1->selectionModel(),&QItemSelectionModel::currentRowChanged,
[表2](常数QModelIndex和当前、常数QModelIndex和以前)
{
if(previous.isValid())
表2->selectRow(current.row());
});
qw;
自动布局=新的QHBoxLayout(&w);
lay->addWidget(表1);
lay->addWidget(表2);
w、 show();
返回a.exec();
}
亲爱的eyllanesc,谢谢您的回答。我试图使你的代码适应我的代码,但没有成功。我收到编译错误:lambda捕获列表中应为“,”或“]”。我做了以下操作:QObject::connect(ui->table1->selectionModel(),&QItemSelectionModel::currentRowChanged,[ui->table2](const QModelIndex¤t,const QModelIndex&previous){if(previous.isValid()){QItemSelectionModel::SelectionFlags command=QItemSelectionModel::Rows | QItemSelectionModel::ClearAndSelect;ui->table2->selectionModel()->setCurrentIndex(current,command);}}}};@froz change[ui->table2]
to[this]
谢谢,它正在工作:)但是,最后一件事,我在终端中有时会出现以下情况:qt.accessibility.core:无法为对象创建可访问的子接口:QTableWidget(0x5593ad844f30,name=“table2”)索引:23
@froz这很奇怪,我没有这条消息,可能是由于Qt的版本或编译(或您项目的编译)造成的。如果我的回答帮助您不要忘记将其标记为正确,如果您不知道如何做,请查看,这是最好的感谢方式。
#include <QApplication>
#include <QHBoxLayout>
#include <QTableWidget>
#include <QItemSelectionModel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
auto *table1 = new QTableWidget(4, 3);
table1->setSelectionBehavior(QAbstractItemView::SelectRows);
auto table2 = new QTableWidget(4, 4);
table2->setSelectionBehavior(QAbstractItemView::SelectRows);
QObject::connect(table1->selectionModel(), &QItemSelectionModel::currentRowChanged,
[table2](const QModelIndex ¤t, const QModelIndex & previous)
{
if(previous.isValid())
table2->selectRow(current.row());
});
QWidget w;
auto lay = new QHBoxLayout(&w);
lay->addWidget(table1);
lay->addWidget(table2);
w.show();
return a.exec();
}