下面是一个示例代码,演示如何在Qt中实现将一个QTableWidget
的某一列内容修改后,将修改内容同步更新到另一个QTableWidget
中。这个示例假设我们有两个QTableWidget
(tableWidget1
和tableWidget2
),当tableWidget1
的某一列内容发生修改后,将修改后的内容更新至tableWidget2
的对应位置。
实现代码
#include <QTableWidget>
#include <QHeaderView>
#include <QApplication>
#include <QVBoxLayout>
#include <QWidget>
class TableSyncWidget : public QWidget {
Q_OBJECT
public:
TableSyncWidget(QWidget* parent = nullptr) : QWidget(parent) {
QVBoxLayout* layout = new QVBoxLayout(this);
// 初始化两个TableWidget
tableWidget1 = new QTableWidget(5, 3, this); // 5行3列
tableWidget2 = new QTableWidget(5, 3, this); // 5行3列
tableWidget1->setHorizontalHeaderLabels({
"Column 1", "Column 2", "Column 3"});
tableWidget2->setHorizontalHeaderLabels({
"Column 1", "Column 2", "Column 3"});
// 填充tableWidget1初始数据
for (int row = 0; row < tableWidget1->rowCount(); ++row) {
for (int col = 0; col < tableWidget1->columnCount(); ++col) {
tableWidget1->setItem(row, col, new QTableWidgetItem(QString("Item %1-%2").arg(row + 1).arg(col + 1)));
tableWidget2->setItem(row, col, new QTableWidgetItem(QString("Item %1-%2").arg(row + 1).arg(col + 1)));
}
}
// 将TableWidget添加到布局中
layout->addWidget(tableWidget1);
layout->addWidget(tableWidget2);
// 连接信号槽,当tableWidget1中的单元格内容更改时触发槽函数
connect(tableWidget1, &QTableWidget::itemChanged, this, &TableSyncWidget::onTableWidget1ItemChanged);
}
private slots:
// 槽函数:当tableWidget1的内容改变时,更新tableWidget2对应单元格内容
void onTableWidget1ItemChanged(QTableWidgetItem* item) {
int row = item->row();
int column = item->column();
// 更新tableWidget2对应位置的内容
if (row < tableWidget2->rowCount() && column < tableWidget2->columnCount()) {
QTableWidgetItem* targetItem = tableWidget2->item(row, column);
if (!targetItem) {
targetItem = new QTableWidgetItem();
tableWidget2->setItem(row, column, targetItem);
}
targetItem->setText(item->text());
}
}
private:
QTableWidget* tableWidget1;
QTableWidget* tableWidget2;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
TableSyncWidget widget;
widget.show();
return app.exec();
}
#include "main.moc"
说明:
- 界面布局:在
TableSyncWidget
中创建了两个QTableWidget
,并使用垂直布局将它们放置在一起。 - 信号槽连接:使用
connect
连接tableWidget1
的itemChanged
信号到槽函数onTableWidget1ItemChanged
,这样当tableWidget1
的某个单元格内容被修改时,槽函数会自动被调用。 - 同步更新:在槽函数
onTableWidget1ItemChanged
中获取修改的单元格位置和内容,然后将该内容同步到tableWidget2
的对应单元格位置。 - 检查:在更新
tableWidget2
时,确保row
和column
在tableWidget2
的有效范围内。
这样,每当tableWidget1
的内容发生变化(例如用户编辑某个单元格),对应的内容就会自动同步到tableWidget2
中。