获取所选QTreeView项目的路径
我是Qt的新手。我正在尝试用驱动器的所有文件和文件夹填充获取所选QTreeView项目的路径,qt,qtreeview,Qt,Qtreeview,我是Qt的新手。我正在尝试用驱动器的所有文件和文件夹填充QTreeView。但是,我无法获取这些文件和文件夹上单击事件的文件和文件夹路径。我使用的代码如下: void client::on_TreeView_clicked() { QModelIndexList list = ui->dir_tree->selectionModel()->selectedIndexes(); QDirModel* model = (QDirModel*)ui->dir_t
QTreeView
。但是,我无法获取这些文件和文件夹上单击事件的文件和文件夹路径。我使用的代码如下:
void client::on_TreeView_clicked()
{
QModelIndexList list = ui->dir_tree->selectionModel()->selectedIndexes();
QDirModel* model = (QDirModel*)ui->dir_tree->model();
int row = -1;
QStringList filelist;
foreach (QModelIndex index, list)
{
QFileInfo fileInfo = model->fileInfo(index);
filelist << fileInfo.filePath();
}
}
void client::on_TreeView_clicked()
{
QModelIndexList list=ui->dir_tree->selectionModel()->selectedIndex();
QDirModel*模型=(QDirModel*)用户界面->目录树->模型();
int行=-1;
QStringList文件列表;
foreach(QModelIndex索引,列表)
{
QFileInfo fileInfo=model->fileInfo(索引);
文件列表invisibleRootItem();
QStandardItem*DriveItem=新QStandardItem(“设备”);
rootnode->appendRow(DriveItem);
QIcon磁盘(“:/Images/disk.png”);
对于(int i=0;isetIcon(磁盘);
DriveItem->appendRow(treeItem1);
}
QStandardItem*PlacesItem=新的QStandardItem(“地点”);
rootnode->appendRow(PlacesItem);
QStandardItem*placeItem1=新QStandardItem(“桌面”);
QStandardItem*placeItem2=新的QStandardItem(“根”);
QStandardItem*placeItem3=新QStandardItem(“应用”);
QStandardItem*placeItem4=新QStandardItem(“文件”);
PlacesItem->appendRow(placeItem1);
QIcon disk1(:/Images/t1.png”);
placeItem1->设置图标(disk1);
PlacesItem->appendRow(placeItem2);
QIcon disk2(:/Images/t2.png”);
placeItem2->设置图标(disk2);
PlacesItem->appendRow(placeItem3);
QIcon disk3(:/Images/t3.png”);
placeItem3->设置图标(disk3);
PlacesItem->appendRow(placeItem4);
QIcon disk4(:/Images/t4.png”);
placeItem4->设置图标(disk4);
ui->treeView->setModel(标准模型);
ui->treeView->expandAll();
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::在树视图上单击(QModelIndex索引)
{
单击此树项时,将生成树视图2,单击树视图2上的这些项时,将调用所单击的(QModelIndex索引)。
}
void主窗口::在树视图上单击(QModelIndex索引)
{
QModelIndexList CurrentIndex=ui->treeView_2->selectionModel()->selectedRows();
QFileSystemModel*模型=(QFileSystemModel*)ui->treeView_2->model();
QList SelectedPathList;
if(CurrentIndex.size())
{
for(long ll=0;llfilePath(索引);
SelectedPathListQFileSystemModel*文件系统=新的QFileSystemModel();
QString myPath=文件系统->文件路径(索引);
为什么不简单地调用模型->文件路径(索引)
?是的,我已经尝试过了。但它也显示了相同的错误。错误消息是什么?请粘贴到这里。由于收到了来自操作系统的信号,次方停止了。信号名称:EXC_BAD_ACCESS Signal的意思是:无法访问内存。我想它在某个地方有内存问题。你能粘贴一个简单的代码来复制这个问题,然后我们可以构建测试吗?也就是说,根据sscce.org的描述,包含main.cpp等。
filelist << fileInfo.filePath();
#include "mainwindow.h"
#include "ui_mainwindow.h"
QStringList templist;
QString filename;
QString path;
QString username;
QStandardItemModel *standardModel;
QSortFilterProxyModel *proxyModel;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
standardModel= new QStandardItemModel;
QStandardItem *rootnode= standardModel->invisibleRootItem();
QStandardItem *DriveItem = new QStandardItem("Devices");
rootnode->appendRow(DriveItem);
QIcon disk(":/Images/disk.png");
for(int i=0;i<driveslist.count();i++)
{
QStandardItem *treeItem1 = new QStandardItem(driveslist[i]);
treeItem1->setIcon(disk);
DriveItem->appendRow(treeItem1);
}
QStandardItem *PlacesItem = new QStandardItem("Places");
rootnode->appendRow(PlacesItem);
QStandardItem *placeItem1 = new QStandardItem("Desktop");
QStandardItem *placeItem2 = new QStandardItem("Root");
QStandardItem *placeItem3 = new QStandardItem("Applications");
QStandardItem *placeItem4 = new QStandardItem("Documents");
PlacesItem->appendRow(placeItem1);
QIcon disk1(":/Images/t 1.png");
placeItem1->setIcon(disk1);
PlacesItem->appendRow(placeItem2);
QIcon disk2(":/Images/t 2.png");
placeItem2->setIcon(disk2);
PlacesItem->appendRow(placeItem3);
QIcon disk3(":/Images/t 3.png");
placeItem3->setIcon(disk3);
PlacesItem->appendRow(placeItem4);
QIcon disk4(":/Images/t 4.png");
placeItem4->setIcon(disk4);
ui->treeView->setModel(standardModel);
ui->treeView->expandAll();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_treeView_clicked(QModelIndex index)
{
On click of this tree items, treeView_2 will be generated and on click of those items on_treeView_2_clicked(QModelIndex index) will be called.
}
void MainWindow::on_treeView_2_clicked(QModelIndex index)
{
QModelIndexList CurrentIndex = ui->treeView_2->selectionModel()->selectedRows();
QFileSystemModel *model=(QFileSystemModel*)ui->treeView_2->model();
QList <QString >SelectedPathList;
if(CurrentIndex.size())
{
for(long long ll = 0;ll < CurrentIndex.size(); ll++)
{
QModelIndex Index = CurrentIndex[ll];
QString m_strSourcePath = model->filePath(Index);
SelectedPathList << m_strSourcePath;
}
}
}