• 10767阅读
  • 19回复

显示文件夹的问题(高手来给指点下) [复制链接]

上一主题 下一主题
离线kning
 
只看楼主 倒序阅读 楼主  发表于: 2009-03-23
想仿照windows的制作一个资源管理器。
想实现下列功能
    1.左边用treeview显示,只显示文件夹。
    2.右边用listview,全部显示。
    3.想实现左边在tree上双击一个文件件,右边全部展现出来,使用如下代码

左边    model = new QDirModel;
    model->setReadOnly(FALSE);
    model->setFilter(QDir::Dirs| QDir::NoDotAndDotDot);
    model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
    ui.treeView->setModel(model);

左边    listModel = new QDirModel(this);
    listModel->setReadOnly(FALSE);
    listModel->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
    ui.listView->setModel(listModel);

想实现左边在tree上双击一个文件件,右边展现出来,使用如下代码
connect(ui.treeView,SIGNAL(doubleClicked(QModelIndex)),ui.listView,SLOT(setRootIndex(QModelIndex)));
结果程序就崩掉了。


请问:
1.上述实现方式思路是否正确,如果正确,为什么程序崩掉?
2.如果不正确,想实现上述功能,应该怎样实现?
请各位高手指教,谢谢。
[ 此帖被kning在2009-03-25 08:42重新编辑 ]
离线kning
只看该作者 1楼 发表于: 2009-03-24
  up up
离线kning
只看该作者 2楼 发表于: 2009-03-24
继续UP
离线yyy174753
只看该作者 3楼 发表于: 2009-03-24
#include <QtGui>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QSplitter *splitter = new QSplitter;
    splitter->setWindowTitle("Two views onto the same directory model");
    QDirModel *model = new QDirModel;
    model->setReadOnly(FALSE);
    model->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
    QTreeView *tree = new QTreeView(splitter);
    tree->setModel(model);
    tree->setIndentation(10);
    tree->setSortingEnabled(true);
     QListView *list = new QListView(splitter);
     list->setModel(model);
    QObject::connect(tree,SIGNAL(clicked(QModelIndex)),list,SLOT(setRootIndex(QModelIndex)));
    splitter->show();
    return app.exec();
}
离线yyy174753
只看该作者 4楼 发表于: 2009-03-24
我的程序只能显示文件夹,不能把文件夹里的文件显示出来,这是我很郁闷的地方,暂且拿出来希望能给你带来启发。我觉得你的程序之间的两个model没有太多的联系,单靠信号和槽似乎远远不够。
离线kning
只看该作者 5楼 发表于: 2009-03-25
回 3楼(yyy174753) 的帖子
注释掉 model->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot); 应该就可以了
离线kning
只看该作者 6楼 发表于: 2009-03-25
回 4楼(yyy174753) 的帖子
两个控件,一个只显示文件夹,一个显示全部文件,
有没什么好的思路?
离线kning
只看该作者 7楼 发表于: 2009-03-25
继续UP
离线kning
只看该作者 8楼 发表于: 2009-03-26
继续UP
离线duduqq

只看该作者 9楼 发表于: 2009-03-26
在DEMO里面好像有这样的例子吧
离线kning
只看该作者 10楼 发表于: 2009-03-26
引用第9楼duduqq于2009-03-26 08:16发表的  :
在DEMO里面好像有这样的例子吧


DEMO里面的是 用了一个listview和一个treeview 共用一个QDirModel来显示的

我想在treeview里面只显示文件夹
另一个全部显示

高手有没什么好的思路?
离线kning
只看该作者 11楼 发表于: 2009-03-26
继续up
离线kning
只看该作者 12楼 发表于: 2009-03-27
继续UP
离线kning
只看该作者 13楼 发表于: 2009-03-28
回 12楼(kning) 的帖子
继续UP
离线kning
只看该作者 14楼 发表于: 2009-03-30
继续UP
离线kning
只看该作者 15楼 发表于: 2009-04-01
继续UP
离线fantalin
只看该作者 16楼 发表于: 2009-04-02
可以用QListWidget,
然后把每一个想显示的东西作为QListWidgetItem加进去
离线kning
只看该作者 17楼 发表于: 2009-04-09
引用第16楼fantalin于2009-04-02 09:14发表的  :
可以用QListWidget,
然后把每一个想显示的东西作为QListWidgetItem加进去


如果要显示的东西很多岂不是很慢?
离线cole2
只看该作者 18楼 发表于: 2009-05-26
使用两个QDirModel(为了一个显示模式,有点扛大炮打小鸟的感觉),在响应消息中做一个处理,将QModelIndex变成filePath的QString,使用setRootIndex完成第2个QDirModel的QModelIndex的转移
//--main.cpp
  QSplitter *splitter = new QSplitter(Qt::Horizontal);
    splitter->setWindowTitle("Two views onto the same directory model");

    QDirModel *model = new QDirModel;
    model->setReadOnly(TRUE);
    model->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
    QTreeView *tree = new QTreeView(splitter);
    tree->setModel(model);
    tree->setIndentation(10);
    tree->setSortingEnabled(true);


    QDirModel *pmodel_file = new QDirModel;
    pmodel_file->setReadOnly(TRUE);
    pmodel_file->setFilter(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);
    QListView *list = new QListView(splitter);
    ListAxu lax(list);
    list->setModel(pmodel_file);
    QObject::connect(tree,SIGNAL(clicked(QModelIndex)),&lax,SLOT(setRootIndex(QModelIndex)));
    splitter->show();
    return app.exec();
//---new class
class ListAxu : public QObject
{
    Q_OBJECT
public:
    QListView *plist;
    ListAxu(QListView *p):plist(p){};
public slots:
    void setRootIndex(QModelIndex midx)
    {
        const QDirModel *pmodel = static_cast<const QDirModel*>(midx.model());

        plist->setRootIndex(static_cast<const QDirModel*>(plist->model())->index(pmodel->filePath(midx)));
    }
};
离线feifei-yan
只看该作者 19楼 发表于: 2009-11-24
请问:如何通过点击一个按钮将QlistView的目录返回到上一级?就像QFileDialog里面一样?大侠能指点一下吗?谢谢了。
快速回复
限100 字节
 
上一个 下一个