qt 请问为什么QDirModel未找到?需要声明什么?

QFileSystemModel是拥有独立线程的,对于文件目录的获取也是异步方式的

当Model发现目录数据有变化的时候 再通过一些Model的信号通知它所在的ItemView,从而完成这个异步的目录枚举过程。

今天我们从一个itemview的例子开始。 我们通常会在Qt例子中寻找我们需要的功能, 再以阅读源码的方式寻找解决问题的方法。如果你碰巧想要写一个资源管理器之类的东西, 肯定会注意到Qt带的名为dirview的例子。这个例子用QTreeView和QDirModel实现了一个简单的浏览文件的程序,该程序简单到让人咋舌的地步, 仅仅一个源码文件, 仅仅不到20行的代码, OMG,如果所有的程序都能这么容易写就好了!(当然我们作为程序员如果冒出了这样的想法那是完全完全错误的, 别忘了我们还指着这个吃饭呢,要是代码都这么简单凭啥人家还给咱工资干这个阿~)

不过这个程序有个不太明显的问题, 有可能你还没有注意到。 在你打开一些目录的时候, 可能会有一瞬间的界面停顿,比如当你要打开的目录文件巨多, 或者是打开网络目录而网络响应的不是那么快的时候。 这是因为QDirModel这个类实现的非常“正规”,没有过多考虑某些极限的情况, 鉴于这个类确实有这样的小缺陷, 另外还鉴于此类的名称太不称头,在4.4版本Qt又引入了一个新的Model类完成类似的功能, 但提供更好的实现和更好用的API,这个类就是我们今天要说的QFileSystemModel.

根据文档的说明QFileSystemModel类和QDirModel提供相同的基本功能, 就是提供本地文件系统数据(目录、文件等),但其与QDirModel相比最大的改进有两点:
1、 单开一个线程获取数据, 不会阻塞gui线程
2、 文件系统数据发生改变时Model会自动更新
这两个新功能都是非常吸引人的, 更别说两个类都支持的诸如改名、创建目录、删除目录等功能了。
用它来做标准的文件系统目录浏览像dirview的例子一样, 寥寥几行就能完成:

上面的代码中的setRootPath是个比较特别的函数, 按照笔者的理解它的功能是通知Model去监控该目录的变化,并且开始获取数据。 在调用此函数之前, Model并不去读取文件系统的结构,所以界面的显示可能是错误的。  设置了该路径之后, 这个函数并不表示会改变当前view以设置的路径为根路径…所以,如果你想实现这个功能需要用到setRootPath的返回值,调用QAbstractItemView的方法setRootIndex就可以了 --这样的功能经常在手机版的文件管理器中出现(如List视图模式下)。

元对象系统可处理运行时的类型信息和动态属性系统 元对象系统基于Qobject类 bc都对 16.不是元对象代码实现的特征的是: /槽机制 Class.forName ( )在运行的时候返回类名称 tr ( )用于国际化中的字符串翻译 metaObject ( )返回该类所关联的元对象 17Q_OBJECT表达不正确的选项是: 类定一种声明了Q_OBJECT后,该类才能使用元对象系统相关的特性 Q_OBJECT对所有类都无关紧要 QObjectQ_OBJECT QObject的子类中未实现属性也可使用Q_OBJECT 18 元对象编译器不展开#define ,但可展开#include 元对象编译器不展开#include 忽略遇到的所有预处理程序 无法处理所有C++语法 19.有如下语句 class

我要回帖

更多关于 it could not find or load Qt 的文章

 

随机推荐