Qt:使用Model/View进行和数据和视图的分离

三种model/iew

FileSystemModel

文件系统模型顾名思义用于文件系统

  1. 创建model指针
  2. 使用指针接收创建好的对象
  3. 将视图设置相应的模型
#include "mainwindow.h"
#include "ui_mainwindow.h"


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

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

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

//信号与槽关联,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)));
}

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

void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
   
    ui->chkIsDir->setChecked(model->isDir(index));//设置标签
    ui->LabPath->setText(model->filePath(index));//设置标签
    ui->LabType->setText(model->type(index));//设置标签
    ui->LabFileName->setText(model->fileName(index));//设置标签

    int sz=model->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));
}

StringListModel

#include "widget.h"
#include "ui_widget.h"

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

    QStringList  theStrList; //初始化字符数组
    theStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河南"; //追加内容

    theModel=new QStringListModel(this); //创建数据模型
    theModel->setStringList(theStrList); //导入字符数组的内容
    ui->listView->setModel(theModel); //为listView设置数据模型

    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);//设置触发
}

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

void Widget::on_listView_clicked(const QModelIndex &index)
{
    //显示QModelIndex的行、列号
    ui->LabInfo->setText(QString::asprintf("当前项:row=%d, column=%d",
                        index.row(),index.column()));
}

void Widget::on_btnIniList_clicked()
{
    //重新载入theStrList的内容,初始化theModel的内容
    QStringList         theStrList; //保存初始 StringList
    theStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河南"; //初始化 StringList
    theModel->setStringList(theStrList);
}

void Widget::on_btnTextClear_clicked()
{
    //清除plainTextEdit的文本
    ui->plainTextEdit->clear();
}

void Widget::on_btnTextImport_clicked()
{
   // 显示数据模型的StringList
    QStringList tmpList;
    tmpList=theModel->stringList();//获取数据模型的StringList

    ui->plainTextEdit->clear(); //文本框清空
    for (

你可能感兴趣的:(Qt,qt,ui,开发语言)