Соединение выделения строки в 2 QTableWidget - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь соединить выборки строк из двух 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)

Знаете ли вы, что идет не так?

1 Ответ

0 голосов
/ 09 ноября 2018

Проблема вызвана тем, что setCurrentIndex() имеет два параметра, а не только один, плюс сигнатуры не совпадают. Таким образом, в этих случаях вы должны использовать лямбду и использовать 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 &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();
}
...