使用两个Table Widget点击一个表格另一个表格根据前者信息显示对应信息
twotable.h头文件:
#pragma once
#include <QtWidgets/QMainWindow>
#include "GeneratedFiles/ui_twotable.h"
class twotable : public QMainWindow
{
Q_OBJECT
public:
twotable(QWidget *parent = Q_NULLPTR);
//用来获取table1对应信息
int id;
//清除table2信息
void clearTable2ListItem();
//更新table2信息
void updateTable2ListItem(int _id);
//给table2添加信息
void addTable2ListItem(int _id);
//给table1添加信息
void addTable1ListItem(int _id);
public Q_SLOTS:
//点击事件对应的槽函数
void checkTableWidget1Item(QTableWidgetItem*);
private:
Ui::twotableClass ui;
};
twotable.cpp源文件:
#include "twotable.h"
twotable::twotable(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//初始化TableWidget1
ui.tableWidget1->setColumnCount(1);
QStringList table1_header;
table1_header << QString("test1");
ui.tableWidget1->setHorizontalHeaderLabels(table1_header);
//初始化TableWidget2
ui.tableWidget2->setColumnCount(1);
QStringList table2_header;
table2_header << QString("test2");
ui.tableWidget2->setHorizontalHeaderLabels(table2_header);
//test
addTable1ListItem(0);
addTable1ListItem(1);
addTable1ListItem(2);
connect(ui.tableWidget1, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(checkTableWidget1Item(QTableWidgetItem*)));
}
void twotable::checkTableWidget1Item(QTableWidgetItem* _table1_item)
{
//换table2数据时先清空之前的数据
clearTable2ListItem();
//如果参数(对应的item)不为空
if (_table1_item != NULL){
//获取当前行的值
int row = _table1_item->row();
QString str;
//获取当前行第0列的值,可以根据需求灵活修改,根据对应信息显示对应信息
str = ui.tableWidget1->item(row, 0)->text();
id = str.toInt();
}
else{
return;
}
//根据id更新table2对应信息
updateTable2ListItem(id);
}
void twotable::clearTable2ListItem()
{
ui.tableWidget2->setRowCount(0);
ui.tableWidget2->clearContents();
}
void twotable::updateTable2ListItem(int _id)
{
//这里可以做一些数据转换,根据id进行操作,
//利用map、结构体、迭代器等等来添加对应的信息
addTable2ListItem(_id);
}
void twotable::addTable2ListItem(int _id)
{
int row = ui.tableWidget2->rowCount();
ui.tableWidget2->setRowCount(ui.tableWidget2->rowCount() + 1);
ui.tableWidget2->setItem(row, 0, new QTableWidgetItem(QString::number(_id)));
}
void twotable::addTable1ListItem(int _id)
{
int row = ui.tableWidget1->rowCount();
ui.tableWidget1->setRowCount(ui.tableWidget1->rowCount() + 1);
ui.tableWidget1->setItem(row, 0, new QTableWidgetItem(QString::number(_id)));
}
main.cpp主函数没进行改动,ui用Qt Designer拖拽出来的
#include "twotable.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
twotable w;
w.show();
return a.exec();
}