• 4992阅读
  • 4回复

[提问]怎样扩展QDirModel的TreeView界面 [复制链接]

上一主题 下一主题
离线stlcours
 

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


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


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



离线lmaxmax

只看该作者 1楼 发表于: 2015-06-13
QFileSystemModel是同步的??外观跟Model有什么关系,不是TreeView吗?
离线stlcours

只看该作者 2楼 发表于: 2015-08-20
可是这样三句话:
    QDirModel model;      
    QTreeView tree;  

    tree.setModel(&model);
就限定了Tree的内容,我应该怎么样才能增加它的内容呢?应该在Tree上直接操作还是修改Model。我想修改Model,这样tree仍可自动匹配出结果,但是继承了QDirModel之后,就不知道该怎么写了。
离线stlcours

只看该作者 3楼 发表于: 2015-08-20
全部代码在这里:

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或者它的子类,内容自动就被填充上了,无法修改,这该怎么办呢?
离线stlcours

只看该作者 4楼 发表于: 2015-08-20
大概理清了思路:
通过这个例子:http://www.java2s.com/Code/Cpp/Qt/QTreeViewdemoandQStandardItem.htm
我觉得想要达到效果,必须自己使用API寻找CDEF盘符。因为我现在写的QDirModel继承类这么多代码,只是在原数据上进行修改效果,它从未说明CDEF这些数据是怎么来的,为什么要显示它们。所以应该继承QStandardItemModel才对。
也许也不难,就是用QFileInfo不断遍历当前目录,自己查找数据,自己控制数据的显示(这部分代码可复用,现在写的就是这部分)
最重要是,一开始只显示几个驱动器盘符就可以了,展开的时候再找子目录不迟

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

快速回复
限100 字节
 
上一个 下一个