提问人:orangelo96 提问时间:11/16/2023 最后编辑:Abderrahmene Rayene Mihouborangelo96 更新时间:11/16/2023 访问量:46
QFileSystemModel 不更新 USB 驱动器内容
QFileSystemModel doesn't update USB drive contents
问:
我有一个传统的Qt应用程序,能够将文件复制到USB驱动器。
该应用程序显示 2 个树视图,一个用于本地文件,一个用于 USB 驱动器上的文件。
问题:
- 我通过应用程序将文件从机器复制到 USB 驱动器。
- 我在另一台计算机上删除了该文件。
- 我将 USB 驱动器重新连接到机器。
- 已删除的文件仍存在于 treeView 中。
我试图重置模型的根路径,但它似乎没有更新。
我正在使用:
- Qt 5.15.3版本
- 最新的 Ubuntu 版本。
视图的设置:
FileBrowser::FileBrowser(widgetKeyBoard *keyboard, QWidget *parent) :
QWidget(parent),
ui(new Ui::FileBrowser),myKeyboard(keyboard)
{
ui->setupUi(this);
//Dateifilter für Datenanzeige anlegen
QStringList filters;
filters.append("*.pdf"); //PDF-Dateien
filters.append("*.txt");
//FileSystemModel initialisieren
myLocalModel.setRootPath(myLocalModel.myComputer().toString());
myLocalModel.setReadOnly(false);//muss gesetzt werden, damit Drag&Drop funktioniert
QModelIndex localRootIndex = myLocalModel.index(QDir(QApplication::applicationDirPath() + "/Measurements").path());
QModelIndex externalRootIndex = myLocalModel.index(QDir(QApplication::applicationDirPath() + "/PDFs").path());
myLocalModel.setNameFilters(filters);//Dateifilter übergeben
myLocalModel.setNameFilterDisables(false);//Dateien, die nicht dem Filter entsprechen, ausblenden
///Font für Treeview festlegen
QFont fnt_items, fnt_header;
fnt_items.setPointSize(16);
fnt_header.setPointSize(16);
fnt_header.setBold(true);
///TreeView Elemente initialisieren
localTree = new QTreeView(this);
ui->layout_internalStorage->addWidget(localTree);
localTree->setModel(&myLocalModel);
localTree->setRootIndex(localRootIndex); //Hier wird der aktuell darzustellende Ordner übergeben
localTree->setSelectionBehavior(QAbstractItemView::SelectRows);
localTree->setSelectionMode(QAbstractItemView::MultiSelection);
localTree->setSortingEnabled(true);
localTree->sortByColumn(0, Qt::AscendingOrder); //Sortieren auf erste Spalte aufsteigend stellen
localTree->viewport()->setAcceptDrops(true);
localTree->setDragEnabled(true);
localTree->setAcceptDrops(true);
localTree->setDragDropMode(QAbstractItemView::DragDrop);
localTree->setDropIndicatorShown(true);
localTree->setDefaultDropAction(Qt::CopyAction);
localTree->header()->hideSection(1); //Spalte 1 verstecken
localTree->header()->hideSection(2); //Spalte 2 verstecken
localTree->header()->setSectionResizeMode(3, QHeaderView::Interactive);
localTree->header()->setSectionResizeMode(0, QHeaderView::Interactive);
localTree->header()->resizeSection(0, ui->w_internalStorage->size().width() - 100);
localTree->setStyleSheet("QTreeView{border: 1px solid black;}");
localTree->setAlternatingRowColors(true);
localTree->setEditTriggers(QAbstractItemView::NoEditTriggers);//Nicht in Editiermodus gehen bei Doppelclick
localTree->setIndentation(40);
localTree->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal { height: 30px; }");//Hoehe der Scrollbar setzen
localTree->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 30px; }");//Breite der Scrollbar setzen
//Schriftgroesse im Treeview setzen
localTree->setFont(fnt_items);
localTree->header()->setFont(fnt_header);
USBtree = new QTreeView(this);
ui->layout_externalStorage->addWidget(USBtree);
USBtree->setModel(&myLocalModel);
USBtree->setRootIndex(externalRootIndex); //Hier wird der aktuell darzustellende Ordner übergeben
USBtree->setSelectionBehavior(QAbstractItemView::SelectRows);
USBtree->setSelectionMode(QAbstractItemView::MultiSelection);
USBtree->setSortingEnabled(true);
USBtree->sortByColumn(0, Qt::AscendingOrder); //Sortieren auf erste Spalte aufsteigend stellen
USBtree->viewport()->setAcceptDrops(true);
USBtree->setDragEnabled(true);
USBtree->setAcceptDrops(true);
USBtree->setDragDropMode(QAbstractItemView::DragDrop);
USBtree->setDropIndicatorShown(true);
USBtree->setDefaultDropAction(Qt::CopyAction);
USBtree->header()->hideSection(1); //Spalte 1 verstecken
USBtree->header()->hideSection(2); //Spalte 2 verstecken
USBtree->header()->setSectionResizeMode(3, QHeaderView::Interactive);
USBtree->header()->setSectionResizeMode(0, QHeaderView::Interactive);
USBtree->header()->resizeSection(0, ui->w_externalStorage->size().width() - 100);
USBtree->setStyleSheet("QTreeView{border: 1px solid black;}");
USBtree->setAlternatingRowColors(true);
USBtree->setEditTriggers(QAbstractItemView::NoEditTriggers);//Nicht in Editiermodus gehen bei Doppelclick
USBtree->setIndentation(40);
USBtree->horizontalScrollBar()->setStyleSheet("QScrollBar:horizontal { height: 30px; }");//Hoehe der Scrollbar setzen
USBtree->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 30px; }");//Breite der Scrollbar setzen
//Schriftgroesse im Treeview setzen
USBtree->setFont(fnt_items);
USBtree->header()->setFont(fnt_header);
//Doppelclick-Events fuer TreeViews
connect(localTree,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(doubleClick_TreeView(QModelIndex)));
connect(USBtree,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(doubleClick_TreeView(QModelIndex)));
}
插入 USB 驱动器时调用的函数:
///USB Status für FileBrowser setzen
void FileBrowser::setUSB_Status(bool status, QString USBpath)
{
if(status) {//USB-Datenträger verfügbar ==> Button zum Wechseln in USB-Pfad hinzufügen
qDebug() << "This is the USBpath given to setUSB_Status: " + USBpath;
//Pfad zum USB-Stick setzen
myLocalModel.setRootPath(QDir::rootPath());
QModelIndex externalRootIndex = myLocalModel.index(USBpath);
qDebug() << "USB Path from FileSystemModel: " + myLocalModel.filePath(externalRootIndex);
USBtree->setModel(&myLocalModel);
USBtree->setRootIndex(externalRootIndex);
USBtree->setCurrentIndex(externalRootIndex);
//Elemente für externen Datenträger anzeigen
USBtree->show();
ui->pb_externalDeleteFile->show();
ui->pb_externalLoadFile->show();
ui->pb_externalNewFolder->show();
ui->pb_copyFile_to_Ext->show();
ui->pb_copyFile_to_Int->show();
ui->pb_moveFile_to_Ext->show();
ui->pb_moveFile_to_Int->show();
ui->pb_USBselectRoot->show();
}
else { //USB-Datenträger nicht verfügbar ==> Button zum Wechseln in USB-Pfad ausblenden
//Elemente für externen Datenträger ausblenden
USBtree->hide();
USBtree->setRootIndex(myLocalModel.index(QApplication::applicationDirPath() + "/PDFs"));
ui->pb_externalDeleteFile->hide();
ui->pb_externalLoadFile->hide();
ui->pb_externalNewFolder->hide();
ui->pb_copyFile_to_Ext->hide();
ui->pb_copyFile_to_Int->hide();
ui->pb_moveFile_to_Ext->hide();
ui->pb_moveFile_to_Int->hide();
ui->pb_USBselectRoot->hide();
}
}
答: 暂无答案
评论
setUSB_Status
rootPath()