QFileSystemModel+QTreeView如何让目录树只显示本地磁盘,不显示外部存储设备?
如题,QFileSystemModel+QTreeView如何实现只显示本地磁盘,不显示外部存储设备的目录树。各位大佬们,具体代码如下
FrmMain::FrmMain(QWidget *parent) : QMainWindow(parent)
{
m_pTreeView = new QTreeView(this);
dir = new QFileSystemModel(this);
dir->setReadOnly(false);
dir->setRootPath(QDir::currentPath());
m_usbModel = new USBDriveFilterProxyModel(this);
m_usbModel->setSourceModel(dir);
m_usbModel->setDynamicSortFilter(true);
m_pTreeView->setModel(m_usbModel);
m_pTreeView->header()->setStretchLastSection(true);
m_pTreeView->header()->setSortIndicatorShown(true);
m_pTreeView->setHeaderHidden(true);
m_pTreeView->hideColumn(1);
m_pTreeView->hideColumn(2);
m_pTreeView->hideColumn(3);
m_pTreeView->sortByColumn(0, Qt::DescendingOrder);
m_pTreeView->collapseAll();
m_pTreeView->resizeColumnToContents(0);
this->setCentralWidget(m_pTreeView);
}
#include "usbdrivefilter.h"
#include <windows.h>
USBDriveFilterProxyModel::USBDriveFilterProxyModel(QObject *parent) :
QSortFilterProxyModel(parent)
{
getMountedRemovables();
// will eventually also register for changes to mounted removables
// but need to get passed my current issue of not displaying only USBs.
}
bool USBDriveFilterProxyModel::filterAcceptsRow(int sourceRow,
const QModelIndex &sourceParent) const
{
QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
// Since drive string can have more than just "<DriveLetter>:", need
// to check each entry in the usb list for whether it is contained in
// the current drive string.
for (int i = 0; i < drivers.size(); i++)
{
if (sourceModel()->data(index0).toString().contains(drivers[i]))
{
return true;
}
}
return false;
}
void USBDriveFilterProxyModel::getMountedRemovables()
{
DWORD test = GetLogicalDrives();
DWORD mask = 1;
UINT type = 0;
WCHAR wdrive[] = L"C:\\"; // use as a drive letter template
for (int i = 0; i < 32; i++)
{
if (test & mask)
{
wdrive[0] = (char)('A' + i); // change letter in template
type = GetDriveType(wdrive);
switch (type) {
case DRIVE_REMOVABLE:
{
QString qdrive = QString((char)('A' + i)) + ":";
removables.append(qdrive);
break;
}
case DRIVE_FIXED:
{
QString qdrive = QString((char)('A' + i)) + ":";
drivers.append(qdrive);
}
break;
default:
break;
}
}
mask = mask << 1;
}
}
#include <QApplication>
#include "frmmain.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
FrmMain w;
w.resize(500, 500);
w.show();
return app.exec();
}
相关推荐
仿QFileSystemModel将文件目录在QTreeView中显示
**递归加载子目录**:由于QFileSystemModel会自动加载根目录及其子目录,因此我们通常不需要编写递归函数来加载文件系统。
Qt QFileSystemModel详解
QFileSystemModel QFileSystemModel提供了一个可用于访问本机文件系统的数据模型。 QFileSystemModel 和视图组件 QTreeView 结合使用,可以用目录树的形式显示本机上的文件系统,如同 Widnows 的资源管理器一样。使用 QFileSystemModel 提供的接口函数,可以创建目录、删除目录、重命名目录,可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详细信息。 要通过 QFileSystemModel 获得本机的文件系统,需要用 se.
Qt目录树制作
QTreeView是Qt的模型/视图/控制器架构的一部分,它可以与各种模型(如QFileSystemModel)配合使用,以显示和操作数据。
Qt5.8 Qtreeview目录树 QAxWidget打开word、pdf文件
在本文中,我们将深入探讨如何在Qt5.8框架下,使用MSVC2015编译器,通过QTreeView控件展示一个目录树,并利用QAxWidget来打开并浏览目录中的Word、PDF和Excel文件。
Qt QTreeView和QFileSystemModel
例如:```cppQFileSystemModel *model = new QFileSystemModel(this);model->setRootPath(QDir::rootPath()); /


