我有两个 QTableWidget,具有相同的行数和列数。现在,一个表中的每个选择都应该自动更新另一个表中的选择,反之亦然。
以下代码可以正常工作,但有一个例外:
#include <QApplication>
#include <QTableWidget>
#include <QHBoxLayout>
#include <functional>
QTableWidget* create() {
auto table = new QTableWidget;
table->setSortingEnabled(true);
table->setRowCount(20);
table->setColumnCount(1);
for (auto i = 0; i < 20; i++) {
{
auto item = new QTableWidgetItem(QString("%1").arg(i+1));
table->setItem(i, 1, item);
}
}
return table;
}
int main(int argc, char** args) {
QApplication app(argc, args);
QTableWidget* table1 = create();
QTableWidget* table2 = create();
auto frame = new QFrame;
frame->setLayout(new QHBoxLayout);
frame->layout()->addWidget(table1);
frame->layout()->addWidget(table2);
frame->show();
auto func = [&](QTableWidget* senderTable, QTableWidget* receiverTable) {
const QSignalBlocker blocker(receiverTable);
receiverTable->selectionModel()->clearSelection();
for (auto item : senderTable->selectedItems()) {
receiverTable->item(item->row(), item->column())->setSelected(true);
}
};
QObject::connect(table2, &QTableWidget::itemSelectionChanged, std::bind(func, table2, table1));
QObject::connect(table1, &QTableWidget::itemSelectionChanged, std::bind(func, table1, table2));
app.exec();
}
如果我对一列进行排序,则会发生异常。在这种情况下,wrong
项目在另一个表中被选中。
换句话说,选择同步的行为应该独立于选择的排序。我的表格的内容只是示例。
实现所需行为的最简单方法可能是什么?