qt qtreeview 快捷键设置 下一个上一下

用qtreeview 展示文件夹及其图片,文件夹里面可能嵌套文件夹
在这里插入图片描述
需要设置上下快捷键 显示图片

QStandardItem* ModelOptimizationTab2::findNextQModelIndex(QStandardItemModel& model,QStandardItem* currentItem,int type)
{

	QStandardItem* nextItem = nullptr;
	if (type == 1)//下一张
	{
		if (currentItem->hasChildren())//非叶子节点,返回第一个叶子即可
		{
			nextItem = currentItem->child(0);
			while (nextItem->hasChildren())//查找该目录下的第一个文件
			{
				nextItem = nextItem->child(0);
			}
			return nextItem;
		}
		else if (currentItem->parent() >= 0)//叶子节点,有父节点
		{
			QStandardItem* parentItem = currentItem->parent();
			while (currentItem->row() == parentItem->rowCount() - 1 && parentItem->parent() >= 0)
			{
				if (parentItem->parent() > 0)//有父节点
				{
					currentItem = parentItem;
					parentItem = parentItem->parent();
				}
				else //(parentItem->parent() == 0)  : top level 
				{
					currentItem = parentItem;
					parentItem = model.invisibleRootItem();
					qDebug() << "top level parent " << QString::number(parentItem->row()); //-1
					break;
				}
			}
			if (currentItem->row() == parentItem->rowCount() - 1)
			{
				return nullptr;
			}
			else
			{
				nextItem = parentItem->child(currentItem->row() + 1);
				return nextItem;
			}
		}
		else //叶子节点且没有父节点
		{
			return nullptr;
		}
	}
	else if (type == -1)//上一张
	{
		if (currentItem->row() > 0 && !currentItem->hasChildren())
		{
			QStandardItem* parentItem = currentItem->parent();
			nextItem = parentItem->child(currentItem->row() -1);
			return nextItem;
		}
		else
		{
			QStandardItem* parentItem = currentItem->parent();
			while (currentItem->row() == 0&& parentItem->parent() >= 0)
			{
				QString name = parentItem->data(Qt::DisplayRole).toString();
				QString name2 = currentItem->data(Qt::DisplayRole).toString();
				if (parentItem->parent() > 0)//有父节点
				{
					currentItem = parentItem;
					parentItem = parentItem->parent();
				}
				else //(parentItem->parent() == 0)  : top level 
				{
					currentItem = parentItem;
					parentItem = model.invisibleRootItem();
					break;
					qDebug() << "top level parent " << QString::number(parentItem->row()); //-1
				}
			}
			if (currentItem->row() == 0)
			{
				return nullptr;
			}
			else
			{
				nextItem = parentItem->child(currentItem->row() - 1);
				while (nextItem->hasChildren())
				{
					nextItem = nextItem->child(nextItem->rowCount()-1);
				}
				return nextItem;
			}
		}
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值