学习《QT5.9 c++ 开发指南》第5章学习笔记1

 QT5.9 c++ 第5章,主要讲解了 Model/View 结构 

        本章的三个例子,分别使用了 QFileSystemModel、   QStirngListModel  、QStandardItemModel  

        对应的继承结构如下图:

        本文先学习的是第一个模型,QFileSystemModel 模型,也是有关计算机文件系统的数据模型。

        哎,话不多说了,干就完了。

        首先是界面的布局部分,直接上图:

    

      对应的ui布局的图属性:

       

      话不多少,上代码部分,本例子基于 QWainWindow  使用QFileSystemModel 模型,当然在mainWindow.h首先添加对应的

头文件。

#include <QFileSystemModel>

    在主窗口添加变量,在ui界面listView点击右键,转到槽,选择clicked(QModelIndex) 

class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QFileSystemModel *mode;//定义数据模型变量
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_listView_clicked(const QModelIndex &index);

private:
    Ui::MainWindow *ui;
};

   在主构造函数中对函数初始化,代码如下边。

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

    mode = new QFileSystemModel(this); //QFileSystemModel提供单独线程,推荐使用
    mode->setRootPath(QDir::currentPath()); //设置根目录

    ui->treeView->setModel(mode);  //设置数据模型
    ui->listView->setModel(mode);  //设置数据模型
    ui->tableView->setModel(mode); //设置数据模型

    //信号与槽关联,treeView单击时,其目录设置为listView和tableView的根节点
    connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
            ui->listView,SLOT(setRootIndex(QModelIndex)));

    connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
            ui->tableView,SLOT(setRootIndex(QModelIndex)));
    //这样就可以啦,是不是很简单

}

  槽函数代码为:

void MainWindow::on_listView_clicked(const QModelIndex &index)
{
    ui->chkIsDir->setChecked(mode->isDir(index));
    ui->LabPath->setText(mode->filePath(index));
    ui->LabType->setText(mode->type(index));

    ui->LabFileName->setText(mode->fileName(index));

    int sz =int( mode->size(index)/1024);
    if(sz<1024)
        ui->LabFileSize->setText(QString("%1 kb").arg(sz));
    else
        ui->LabFileSize->setText(QString::asprintf("%.1f MB ",sz/1024.0));


}

    这个例子很简单也是我第一次写博客,分享下学习的心得,之前用的是MFC 或者win32 写遍历系统文件的程序,要繁琐很多,QT例子中,只要你定义了一个QFileSystemModel变量 ,把对应的界面

    mode = new QFileSystemModel(this);   //QFileSystemModel提供单独线程,推荐使用
    mode->setRootPath(QDir::currentPath());  //设置根目录

    ui->treeView->setModel(mode);  //设置数据模型
    ui->listView->setModel(mode);  //设置数据模型
    ui->tableView->setModel(mode); //设置数据模型

    设置进去,界面选择文件的同时,mode对应遍历。

    如果需要例子与对应的电子书籍,请可以联系我。QQ:365054851 无关人员请勿扰。

    希望与大家一起进步。

    例子我已经上传。希望大家多多点赞。

发布了8 篇原创文章 · 获赞 2 · 访问量 277

猜你喜欢

转载自blog.csdn.net/weixin_42126427/article/details/103976844