Qt实现一个表格选中一行另一个表格显示对应信息

使用两个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();
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇树谦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值