演示如何在Qt中实现将一个QTableWidget的某一列内容修改后,将修改内容同步更新到另一个QTableWidget中

下面是一个示例代码,演示如何在Qt中实现将一个QTableWidget的某一列内容修改后,将修改内容同步更新到另一个QTableWidget中。这个示例假设我们有两个QTableWidgettableWidget1tableWidget2),当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"

说明:

  1. 界面布局:在TableSyncWidget中创建了两个QTableWidget,并使用垂直布局将它们放置在一起。
  2. 信号槽连接:使用connect连接tableWidget1itemChanged信号到槽函数onTableWidget1ItemChanged,这样当tableWidget1的某个单元格内容被修改时,槽函数会自动被调用。
  3. 同步更新:在槽函数onTableWidget1ItemChanged中获取修改的单元格位置和内容,然后将该内容同步到tableWidget2的对应单元格位置。
  4. 检查:在更新tableWidget2时,确保rowcolumntableWidget2的有效范围内。

这样,每当tableWidget1的内容发生变化(例如用户编辑某个单元格),对应的内容就会自动同步到tableWidget2中。

猜你喜欢

转载自blog.csdn.net/qq_43689451/article/details/143359617