假设两个QTableWidget变量为:QTableWidget * pTableWndOne, pTableWndTwo;
1. 同时修改两个QTableWidget中列宽方式:
connect(pTableWndOne->horizontalHeader(), &QHeaderView::sectionResized, this, [=](int logicalIndex, int oldSize, int newSize) {
if (pTableWndTwo->columnCount() < logicalIndex) { // 防止delete时崩溃
return;
}
pTableWndTwo->setColumnWidth(logicalIndex, newSize);
});
connect(pTableWndTwo->horizontalHeader(), &QHeaderView::sectionResized, this, [=](int logicalIndex, int oldSize, int newSize) {
if (pTableWndOne->columnCount() < logicalIndex) { // 防止delete时崩溃
return;
}
pTableWndOne->setColumnWidth(logicalIndex, newSize);
});
注意: 使用以上代码的时候,应该在pTableWndOne->clear()和 pTableWndTwo->clear()时增加标识,防止陷入死循环。
bool bClear = false; // 成员变量
/* 需要clear()时候的代码 */
bClear = true;
pTableWndOne->clear();
pTableWndTwo->clear()
bClear = false;
/* 连接代码修改 */
connect(pTableWndOne->horizontalHeader(), &QHeaderView::sectionResized, this, [=](int logicalIndex, int oldSize, int newSize) {
if (pTableWndTwo->columnCount() < logicalIndex || bClear == true) { // 防止delete时崩溃
return;
}
pTableWndTwo->setColumnWidth(logicalIndex, newSize);
});
connect(pTableWndTwo->horizontalHeader(), &QHeaderView::sectionResized, this, [=](int logicalIndex, int oldSize, int newSize) {
if (pTableWndOne->columnCount() < logicalIndex || bClear == true) { // 防止delete时崩溃
return;
}
pTableWndOne->setColumnWidth(logicalIndex, newSize);
});
2. 同时修改两个QTableWidget中选中行
connect(pTableWndOne, &QTableWidget::itemClicked, this, [=](QTableWidgetItem *item) {
if (item == nullptr) {
return;
}
int nCurRow = item->row();
int nTwoCurRow = pTableWndTwo->currentRow();
if (nCurRow != nTwoCurRow) {
pTableWndTwo->selectRow(nCurRow);
}
});
connect(pTableWndTwo, &QTableWidget::itemClicked, this, [=](QTableWidgetItem *item) {
if (item == nullptr) {
return;
}
int nCurRow = item->row();
int nTwoCurRow = pTableWndOne->currentRow();
if (nCurRow != nTwoCurRow) {
pTableWndOne->selectRow(nCurRow);
}
});