Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
C++ 连接2 QTableWidget中的行选择_C++_Qt_Qt5_Selection_Qtablewidget - Fatal编程技术网

C++ 连接2 QTableWidget中的行选择

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

我正在尝试从两个QTableWidget连接行选择。 我的意思是,当我在表1中选择一行时,我希望我的程序选择表2中的同一行。这两个表的列数不相同,因此我不能只为第一个表选择一个项目,而在第二个表中选择相同的项目。 我尝试使用以下方法但未成功:

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 &current, 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();
}