我正在使用QTreeView和QFileSystemModel开发Qt应用程序。
我可以抚养父母的孩子到一个层次,但是我不能抚养父母的孩子的孩子。
例如:

C是B的孩子,

B是A的孩子

我可以将B作为A的孩子,但我也希望C作为A的孩子。
我想要这样的C-> B-> A。

有人可以为此提供一些帮助吗?
提前致谢。

//QItemSelectionModel *sel = ui->dir_tree->selectionModel();
QStringList strings = extractStringsFromModel(ui->dir_tree->model(), ui->dir_tree->rootIndex());

QFileSystemModel* model = (QFileSystemModel*)ui->dir_tree->model();
QModelIndexList indexlist = ui->dir_tree->selectionModel()->selectedIndexes();
QVariant data;

//QList<QModelIndex> modelindex(indexlist);

int row = -1;

for(int i=0; i<indexlist.size();i=i+4)
{
    QModelIndex mi=indexlist.at(i);
    info1 = model->fileInfo(mi);
    QString childstr = info1.filePath();
    QString childname = info1.fileName();

    QModelIndex mi2= indexlist.at(i).parent();
    info = model->fileInfo(mi2);
    QString parentstr = info.filePath();
    QString parentname = info.fileName();
    QStringList childlist;
    for(int j=0;j<model->rowCount(indexlist.at(i));j++)
    {
        QModelIndex mi3 = indexlist.at(i).child(j, 0);
        info2 = model->fileInfo(mi3);
        QString childrenstr = info2.filePath();
        childlist << childrenstr;
        qDebug()<<"parents' children"<<childrenstr<<j;
    }
}

最佳答案

我喜欢对这种事情使用递归:

void MyTreeView::GetAllChildren(QModelIndex &index, QModelIndexList &indicies)
{
    indicies.push_back(index);
    for (int i = 0; i != model()->rowCount(index); ++i)
        GetAllChildren(index.child(i,0), indicies);
}


用法(从树状视图内部的某处):

QModelIndexList list;
GetAllChildren(model()->index(0,0), list);

10-02 23:29