qt的QItemSelectionModel

先在界面上来个表格,在工具栏上增加两个工具按钮

cpp 复制代码
	QStandardItemModel * model = new QStandardItemModel(7, 4, this);
	for (int row = 0; row < 7; row++) {
		for (int column = 0; column < 4; column++) {
			QStandardItem * item = new QStandardItem(QString("%1").arg(row * 4 + column));
			model->setItem(row, column, item);
		}
	}
	_table_view = new QTableView;
	_table_view->setModel(model);
	setCentralWidget(_table_view);
	this->resize(800, 800);

	//获取视图的项目选择模型
	QItemSelectionModel * selection_model = _table_view->selectionModel();
	
	ui.mainToolBar->addAction(tr(u8"当前项目"), this, &QtWidgetsApplication7::getCurrentItemData);
	ui.mainToolBar->addAction(tr(u8"切换选择"), this, &QtWidgetsApplication7::toggleSelection);

接下来是实现这两个函数

cpp 复制代码
void QtWidgetsApplication7::getCurrentItemData()
{
	auto currentData = _table_view->selectionModel()->currentIndex().data().toString();
	qDebug() << tr(u8"当前项目的内容") << currentData;
}

void QtWidgetsApplication7::toggleSelection()
{
	//找到根节点下第0行0列的item的索引
	QModelIndex topLeft = _table_view->model()->index(0, 0, QModelIndex());
	//获取根节点下最大的行号
	auto max_row = _table_view->model()->rowCount(QModelIndex());
	//获取根节点下最大的列号
	auto max_column = _table_view->model()->columnCount(QModelIndex());
	//根据列号和行号获取最右下角的item的索引
	QModelIndex bottomRight = _table_view->model()->index(max_row - 1, max_column - 1, QModelIndex());
	//设置选择区域
	QItemSelection curSelection(topLeft, bottomRight);
	_table_view->selectionModel()->select(curSelection, QItemSelectionModel::Toggle);
}
相关推荐
AI大模型训练家3 分钟前
JAVA没有搞头了吗?
java·开发语言·python·面试·职场和发展·性能优化
CHHC18806 分钟前
golang 使用gzip对json例子
开发语言·golang·json
程序猿-瑞瑞7 分钟前
22 go语言(golang) - gin框架安装及使用(三)
开发语言·golang·gin
终生成长者8 分钟前
go 自己写序列化函数不转义
java·开发语言·golang
7yewh25 分钟前
LeetCode 力扣 热题 100道(二十一)接雨水(C++)
开发语言·数据结构·c++·算法·leetcode·安卓
界面开发小八哥26 分钟前
QtitanChart组件——高效、灵活的Qt数据可视化解决方案
c++·qt·ui·信息可视化·界面控件
c++初学者ABC35 分钟前
统计字符的个数C++
开发语言·数据结构·c++
火山上的企鹅42 分钟前
Qt WORD/PDF(四)使用 QAxObject 对 Word 替换(QWidget)
qt·pdf·word·qaxobject
数据小小爬虫43 分钟前
如何利用Python爬虫获得1688商品详情
开发语言·爬虫·python
C66668881 小时前
C#多线程
开发语言·汇编·c#