连接 2 QTableWidget 中的行选择
Connecting selection of row in 2 QTableWidget
我正在尝试连接来自两个 QTableWidget 的行 selections。
我的意思是,当我 select 在 Table 1 中的一行时,我希望我的程序 select 在 table 2 中的同一行。两个 table 没有相同数量的列,所以我不能只 select 第一个项目和 select 第二个项目的相同项目。
我尝试使用以下但没有成功:
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()
:
#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();
}
我正在尝试连接来自两个 QTableWidget 的行 selections。 我的意思是,当我 select 在 Table 1 中的一行时,我希望我的程序 select 在 table 2 中的同一行。两个 table 没有相同数量的列,所以我不能只 select 第一个项目和 select 第二个项目的相同项目。 我尝试使用以下但没有成功:
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()
:
#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();
}