用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;
}
}
}
}