【qt】初识模型和视图2

简介: 【qt】初识模型和视图

【qt】初识模型和视图1:https://developer.aliyun.com/article/1523105

7.模型操作数据

①文件名

ui->labelFileName->setText(model->fileName(index));

②文件大小

内存单位换算:

1 byte(字节)= 8 bits(位)

1 kilobyte(KB)= 1024 bytes(字节)

1 megabyte(MB)= 1024 kilobytes(KB)

1 gigabyte(GB)= 1024 megabytes(MB)

1 terabyte(TB)= 1024 gigabytes(GB)

int size=model->size(index)/1024;//原本得到是字节,除以1024后得到是kb
    if(size>1024)//如果kb还大于1024,那就再除1024转换成mb
    {
        ui->labelFileSize->setText(QString::asprintf("%.1f MB",size/1024.0));
    }
    else
    {
        ui->labelFileSize->setText(QString::asprintf("%d MB",size));
    }

③文件类型

ui->labelType->setText(model->type(index));

④是否是目录

ui->checkBox->setChecked(model->isDir(index));

⑤文件路径

ui->labelPath->setText(model->filePath(index));

完整代码:

void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    ui->listView->setRootIndex(index);
    ui->tableView->setRootIndex(index);
    
    ui->labelFileName->setText(model->fileName(index));
    int size=model->size(index)/1024;//原本得到是字节,除以1024后得到是kb
    if(size>1024)//如果kb还大于1024,那就再除1024转换成mb
    {
        ui->labelFileSize->setText(QString::asprintf("%.1f MB",size/1024.0));
    }
    else
    {
        ui->labelFileSize->setText(QString::asprintf("%d MB",size));
    }
    ui->labelType->setText(model->type(index));
    
    ui->checkBox->setChecked(model->isDir(index));
    
    ui->labelPath->setText(model->filePath(index));
}

运行结果:

perfect,哈哈,你们找不到我的小电影吧,你们玩的时候,可别把你的小电影展示出来了。

三.字符串链表模型

目标效果:

1.那种数据?

字符串链表模型管理着内存数据QStringList

2.界面拖放

3.创建模型

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStringListModel>//字符串链表模型

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QStringListModel*model;
};
#endif // MAINWINDOW_H

mainwindow.cpp

model=new QStringListModel;//创建模型

4.模型设置数据

QStringList list={"上海","北京","南京","成都","达州","江苏","广东"}; 
model->setStringList(list);

5.视图设置模型

ui->listView->setModel(model);
 ui->tableView->setModel(model);

运行结果:

6.模型插入数据

①尾部添加数据

模型是以来管理数据,所以不管我们要实现什么功能,我们都要找到行,通过视图我们可以拿到模型索引。

模型索引其实就是类似于二维数值,我们通过其拿到行和列。

void MainWindow::on_pushButtonAdd_clicked()
{
    model->insertRow(model->rowCount());//尾插法
    //但是现在添加的是一个空行
    QModelIndex index=model->index(model->rowCount()-1,0);//通过行列拿到模型索引
    model->setData(index,"新的城市");//设置模型数据
    ui->ListView->setCurrentIndex(index);//选择当前索引
}

运行结果:

③选中位置插入

void MainWindow::on_pushButtonInsert_clicked()
{
    QModelIndex index=ui->listView->currentIndex();//通过视图获取当前索引位置
    //模型以行管理数据,所以插入的是行,所以通过模型索引拿到行
    model->insertRow(index.row());//通过模型索引拿到行
    model->setData(index,"新的城市");//设置数据
    ui->listView->setCurrentIndex(index);//选中当前行

}

运行结果:

7.模型删除数据

①选中位置删除

void MainWindow::on_pushButtonDel_clicked()
{
    QModelIndex index=ui->listView->currentIndex();//获取当前索引
    model->removeRow(index.row());//通过模型索引获取行,然后移除模型数据
}

运行结果:

②清空

void MainWindow::on_pushButtonClearList_clicked()
{
    model->removeRows(0,model->rowCount());//通过移除多行来清空列表
}

运行结果:

③初始化模式数据

清空后可以初始化

void MainWindow::on_pushButtonInit_clicked()
{
    QStringList list={"上海","北京","南京","成都","达州","江苏","广东"};
    model->setStringList(list);    
}

8.模型拿到数据

void MainWindow::on_pushButtonDisplay_clicked()
{
    ui->plainTextEdit->clear();//每次获取前,先把上次的清空。
    QStringList list=model->stringList();//拿到字符串链表数据
    for(int i=0;i<list.count();i++)
    {
        ui->plainTextEdit->appendPlainText(list[i]);
    }
}

运行结果:

OK,就大功告成了。文本清空按钮,那么简单,自己做。

四.总结

模型有很多种,我这里只先简单了讲了文件系统模型字符串链表模型.通过学习,我们要重点的掌握数据,模型,视图之间的关系。

慌了,你就慢下来,还慌,你就停下来!

相关文章
|
2月前
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
58 0
|
2月前
QT4.7版本的OPENGL的3D旋转模型例子
QT4.7版本的OPENGL的3D旋转模型例子
|
2月前
|
存储 安全 Java
Qt线程池+生产者消费者模型
Qt线程池+生产者消费者模型
70 5
|
2月前
【qt】标准项模型1
【qt】标准项模型
21 0
|
1月前
|
编译器 C++
(10)Qt对象模型
(10)Qt对象模型
|
2月前
|
监控 数据可视化 Linux
Qt Model&View&Delegate(模型-视图-代理) 介绍和使用
Qt Model&View&Delegate(模型-视图-代理) 介绍和使用
Qt Model&View&Delegate(模型-视图-代理) 介绍和使用
|
2月前
|
数据库 开发者 Windows
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-2
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
2月前
|
XML 设计模式 JSON
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-1
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
2月前
|
索引
【qt】标准型模型 下
【qt】标准型模型 下
9 0
|
2月前
【qt】标准项模型2
【qt】标准项模型
9 0