新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt基础编程
>
QFileSystemModel+QTreeView如何让目录树只显示本地磁盘,不显示 ..
发帖
回复
返回列表
新帖
1760
阅读
1
回复
[讨论]
QFileSystemModel+QTreeView如何让目录树只显示本地磁盘,不显示外部存储设备?
[复制链接]
上一主题
下一主题
离线
lwei24
UID:202628
注册时间
2020-05-17
最后登录
2025-01-07
在线时间
456小时
发帖
399
搜Ta的帖子
精华
0
金钱
5945
威望
440
贡献值
0
好评度
360
访问TA的空间
加好友
用道具
骑士
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2023-05-05
如题,QFileSystemModel+QTreeView如何实现只
显示
本地磁盘,不显示外部存储设备的
目录
树。各位大佬们,如下
//frmain.cpp
复制代码
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);
}
//usbdrivefilter.cpp
复制代码
#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;
}
}
//main.cpp
复制代码
#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();
}
如上代码,为什么虽然你能实现显示本地磁盘,但是点击本地磁盘后,就
没有
目录树了。各位大佬,有什么拌粉
实现只显示本地磁盘,不显示外部存储设备的目录树呢?欢迎大佬们指点一二,小弟在此感激不尽!!
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
苏宇杰
UID:220232
注册时间
2023-09-02
最后登录
2024-12-27
在线时间
0小时
发帖
1
搜Ta的帖子
精华
0
金钱
20
威望
31
贡献值
0
好评度
1
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
1楼
发表于: 2024-12-26
获取到盘符的时候是可以查看该驱动的链接的,就像用来区分你电脑上的网盘和本地盘区别一样。
共
条评分
回复
举报
发帖
回复
返回列表
http://www.qtcn.org/bbs
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限100 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
发 布
隐藏
快速跳转
站务及资讯
网站公告
新闻资讯
Qt官方发布
网站管理
Qt应用及资源
Qt 作品展
Qt代码秀
Qt应用版
Qt技术讨论区
Qt安装与发布
Qt中文处理
Qt基础编程
Qt QML开发
Qt嵌入式开发
Qt移动平台开发
其它技术开发讨论区
Qt图书专区
《C++ GUI Qt 4编程》(第2版)专栏
《Qt高级编程》专栏
《零基础学Qt4编程》专栏
《Qt设计模式》(第2版) 图书专栏
Python Qt GUI快速编程
Qt项目开发区
天池项目
Qt开放平台开发库
机械CAD
扇贝词典
非活跃项目区
社区中心
帖子回收站(Trash)
招聘、求职、供求、广告等
休闲娱乐
关闭
关闭
选中
1
篇
全选