7.qfilesystemmodel rowcount 为什么为0? 一个简单的model类的例子

任务:

1.新建一个空的mainwindow项目

2.debug下编译得到一个文件夹,应用程序输出这个文件夹中的文件(不显示文件夹中的文件夹)

3.使用QFileSystemModel完成。

本例显示结果:

Makefile

Makefile.Debug

Makefile.Release

ui_mainwindow

(debug和release是文件夹,不在应用程序输出中)

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QDebug>
#include <QDir>
#include <QFileSystemModel>
#include <QModelIndex>
#include <QFileInfo>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QFileSystemModel *model;
private slots:
    void findDirectory(const QString &path);
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model = new QFileSystemModel();
    model->setRootPath(QDir::currentPath());
    //这里直接调用rowCount函数返回0,
    //QFileSystemModel是异步载入目录,当directoryLoaded信号发射之后,表示目录载入完成
    //所以我们在槽中调用rowCount,返回正确的值。
    connect(model, SIGNAL(directoryLoaded(QString)), this, SLOT(findDirectory(QString)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::findDirectory(const QString &path)
{
    QModelIndex parentIndex = model->index(QDir::currentPath());
    int row = model->rowCount(parentIndex);

    for(int i = 0; i<row; i++) {

        QModelIndex index = model->index(i, 0, parentIndex);
        QString text = index.data(Qt::DisplayRole).toString();
        QString fullPath = QDir::currentPath().append("/").append(text);

        QFileInfo *fileInfo = new QFileInfo(fullPath);

        if(fileInfo->isFile())
            qDebug() << text;
    }
}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

程序输出:

      

时间: 2024-08-23 04:19:51

7.qfilesystemmodel rowcount 为什么为0? 一个简单的model类的例子的相关文章

jfinal初接触,一个简单的文件上传例子

写了个上传的小例子. 从jfinal官网下载jfinal-1.8_demo_for_jsp.zip 然后下载jfinal-1.8-lib.zip 按要求删掉该删除的,引入一些包,之后的项目结构: DemoConfig.java中配置路由,只留下了根路径: /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); //me.add("/blog", B

一个简单的 ASP.NET MVC 例子演示如何在 Knockout JS 的配合下,使用 TypeScript 。

前言 TypeScript 是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发.TypeScript扩展了 JavaScript 的句法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作.TypeScript是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性.TypeScript

Python+Selenium进阶版(八)- Python自定义封装一个简单的Log类

目标:如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里. 练习场景: 我们需要封装一个简单的日志类,主要有以下内容: 1.生成的日志文件格式是 年月日分秒.log 2.生成的XXX.log文件存储在项目根目录下Logs文件夹下 3.这个日志类,支持INFO,ERROR两种日志级别 4.日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述 解决思路: 1.在根目录下新建一个Logs的文件夹,获取这个Log的相对路径: 2.日志的保存命名,需要系统时间:

CSS布局中一个简单的应用BFC的例子

什么是BFC BFC(Block Formatting Context),简单讲,它是提供了一个独立布局的环境,每个BFC都遵守同一套布局规则.例如,在同一个BFC内,盒子会一个挨着一个的排,相邻盒子的间距是由margin决定且垂直方向的margin会重叠.而float和clear float也只对同一个BFC内的元素有效. 什么情况产生BFC W3C标准中这样描述:Floats, absolutely positioned elements, block containers (such as

一个简单的函数指针测试例子

一般函数指针的一个简单测试.将函数放到vector里面,将函数作为形参. 1 typedef void(*GTestFunPtr)(int, int); 2 3 void test1(int a, int b) 4 { 5 std::cout << "test1:" << a + b << std::endl; 6 } 7 8 void test2(int a, int b) 9 { 10 std::cout << "test2

一个简单的Spring MVC的例子

一.Spring MVC的优点 1.Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多.呵呵,当然这不是决定因素. 2.Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分) 3.Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制. 二.简单的例子 1.配置web.xml 指除了Control层外

一个简单的Log类

经常在运行程序时需要在某些地方记录log,之前想用Log4Net,但又感觉要附带一个dll,想要只带一个exe文件运行,干脆自己写个简单的类了. 需要满足的条件:被多个线程调用:时间的准确性不重要,知道先后关系就行:不想阻塞线程,毕竟干活才是主要目的,为了不太在意时间的log而阻塞等待有点不划算. 然后开始:1.需要静态类,默认存储在当前目录下,可指定log文件名:2.需要一个用来写入到文件的方法. public static class LogWriter { static string lo

一个简单的购物类网站

最近给学校做了一个购物类的网站:捐赠网站;模式和淘宝是一样的:选择商品->选择数量->填写留言(评价)->付款(支付宝付款);逻辑比较简单. 接下来的几天,我将就编程中遇到的一些问题和体会说说.下面列出了想说的几点; 1.html 文档对象模型 DOM: 2.安全验证方面:比如客户端向服务器传输数据时怎么保证数据的安全性;

一个简单的数组类操作

要求定义一个数组类,动态分配数组大小,并实现反转与排序操作. 代码如下: class Array { private int a[] = null; private int foot=0; public Array(int len) { if (len > 0) this.a = new int[len]; else this.a = new int[1]; } public boolean add(int i){ if(this.foot<this.a.length){ this.a[foo