如何从QTreeView返回节点名称

时间:2013-09-21 17:50:27

标签: c++ qt

我一直在研究本地目录的简单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)));

2 个答案:

答案 0 :(得分:0)

您可以仅根据QStringsetData方法via filePath()方法中检索QModelIndex路径,因此每次用户检查时都会调用该路径(或者未选中)正在显示模型中的某个目录或文件,然后您需要将所有这些路径存储在某个conatainer中并实现方法以返回此信息:

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;
//...
};

答案 1 :(得分:0)

WhatEverClassInheritingQObject::handleTreeWidgetEvent(const QModelIndex& index)
{
   const QString valuablePathAskedFor(fileSystemModel->fileName(index));
   ...
}