我一直在研究本地目录的简单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)));
答案 0 :(得分:0)
您可以仅根据QString
在setData
方法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));
...
}