1

我一直在研究一个简单QTreeView的本地目录。目标是允许用户浏览到他/她的目录并选择正确的csv文件。

我创建了一个QFileSystemModel并用QTreeView. 我很困惑如何从当前选择的节点获取文件名。

我通读了文档,发现了以下信号/插槽配对:

connect(tree, SIGNAL(clicked(QModelIndex)), this, SLOT(handleTreeWidgetEvent(QModelIndex)));

但是我不确定QModelIndex一旦激活该怎么办。我知道你应该QTreeView用这个索引来索引,但我不确定如何。

任何帮助是极大的赞赏。


编辑:添加代码以便人们可以看到我在做什么。

QFileSystemModel *model = new QFileSystemModel;                        
model->setRootPath("/");                      

tree = new QTreeView;
tree->setModel(model);

tree->setRootIndex(model->index("/home/Missions/"));
tree->setColumnWidth(0, 350);          
connect(tree, SIGNAL(clicked(QModelIndex)), this, SLOT(handleTreeWidgetEvent(QModelIndex)));
4

2 回答 2

0
WhatEverClassInheritingQObject::handleTreeWidgetEvent(const QModelIndex& index)
{
   const QString valuablePathAskedFor(fileSystemModel->fileName(index));
   ...
}
于 2013-09-21T20:26:31.703 回答
0

您可以通过仅基于QString_在一些容器和实现方法中返回这个:setDatafilePath()QModelIndex

bool MyQFileSystemModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if (index.column() != 0 || role != Qt::CheckStateRole)
        return QFileSystemModel::setData(index, value, role);

    int newCheckState = value.toInt();
    QString filePath = filePath(index);

    if (newCheckState == Qt::Checked || newCheckState == Qt::PartiallyChecked )
        checkedPaths.insert(filePath);
    else
        checkedPaths.remove(filePath);

    emit dataChanged(index, index.child(index.row(),0));

    return true;
}

class MyQFileSystemModel : public QFileSystemModel
{
Q_OBJECT

public:
//...
QSet<QString> getChecked() const { return checkedPaths; }

private:
QSet<QString> chackedPaths;
//...
};
于 2013-09-21T18:07:37.883 回答