首页| 论坛| 消息

标题:怎样扩展QDirModel的TreeView界面
作者:stlcours
日期:2015-06-10 17:06
内容:

因为QDirModel是异步效果(区别于同步的QFileSystemModel),我使用它做了许多功能方面的扩展,还都挺好用。但是有一个问题我一直不明白,就是如何修改它的界面?
我想要的界面(在C/D/E等盘符的上面加上一些独有的目录,这些目录其实存在于C盘的某一个子目录下,但是放在上面有助于用户快速的选择这几个独特的目录):


目前的效果(比较简单,只有C/D/E驱动器):


请问各位能给点提示吗?怎么样做出相应的效果?


#1 [lmaxmax 06-13 13:16]
QFileSystemModel是同步的??外观跟Model有什么关系,不是TreeView吗?
#2 [stlcours 08-20 18:39]
可是这样三句话:
QDirModel model;
QTreeView tree;
tree.setModel(&model);
就限定了Tree的内容,我应该怎么样才能增加它的内容呢?应该在Tree上直接操作还是修改Model。我想修改Model,这样tree仍可自动匹配出结果,但是继承了QDirModel之后,就不知道该怎么写了。
#3 [stlcours 08-20 19:35]
全部代码在这里:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDirModel model;
QTreeView tree;
tree.setModel(&model);
tree.setSelectionMode(QAbstractItemView::MultiSelection);

QSplitter *splitter = new QSplitter;
splitter->addWidget(&tree);
splitter->setWindowTitle(QObject::tr("Model/View"));
splitter->show();
return app.exec();
}
只要使用QDirModel或者它的子类,内容自动就被填充上了,无法修改,这该怎么办呢?
#4 [stlcours 08-20 19:56]
大概理清了思路:
通过这个例子:http://www.java2s.com/Code/Cpp/Qt/QTreeViewdemoandQStandardItem.htm
我觉得想要达到效果,必须自己使用API寻找CDEF盘符。因为我现在写的QDirModel继承类这么多代码,只是在原数据上进行修改效果,它从未说明CDEF这些数据是怎么来的,为什么要显示它们。所以应该继承QStandardItemModel才对。
也许也不难,就是用QFileInfo不断遍历当前目录,自己查找数据,自己控制数据的显示(这部分代码可复用,现在写的就是这部分)
最重要是,一开始只显示几个驱动器盘符就可以了,展开的时候再找子目录不迟

所以,继承QDirModel完全是错误的,它只能修改和显示现有数据,而不能从源头上把握数据从哪里来的。

回复 发表
主题 版块