QT - 模型与视图

news2024/9/21 12:32:07

经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

MVC 不是一种设计模式,而是一种框架模式。

在 QT 中,换个说法,叫MVD(D - 代理)
在这里插入图片描述
链接: https://www.bilibili.com/video/BV18x411S7gT/?spm_id_from=333.337.search-card.all.click&vd_source=b91967c499b23106586d7aa35af46413
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

一、QListView 和 QTreeView 与文件系统模型结合的例子

使用模型和视图,需要添加对应的头文件。

一个小例子:

#include "widget.h"
#include "ui_widget.h"
#include <QSplitter>
#include <QTreeView>
#include <QListView>
#include <QFileSystemModel>
#include <QDir>

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

    QSplitter *spliter = new QSplitter;

    QFileSystemModel *model = new QFileSystemModel; //文件系统模型

    model->setRootPath(QDir::currentPath());//设置当前路径为根目录

    QTreeView *treeView = new QTreeView(spliter);
    treeView->setModel(model);//将视图treeView与模型model进行绑定
	
	QListView *listView = new QListView(spliter);
    listView->setModel(model);//将视图listView与模型model进行绑定

    spliter->show();
}    

运行效果如下:

分裂器中的左边是 treeView 视图,右边是 listView 视图。
在这里插入图片描述
遇到下面的问题:QFileSystemModel类显示根目录不起作用及setRootPath、setRootIndex函数的区别。https://blog.csdn.net/danshiming/article/details/127035073

修改后,
在这里插入图片描述
运行效果如下,
在这里插入图片描述
这个是放在widget中的,所以会显示两个窗体,一个是分裂器窗体,一个是widget窗体。分裂器将两个视图给分开了。

将这部分代码放入main中并不让widget显示,就只会显示一个窗体了。

在这里插入图片描述

二、QStandardItemModel 和 QTableView 结合的例子

链接: https://www.bilibili.com/video/BV1yx411r7qp/?spm_id_from=333.788.recommend_more_video.-1&vd_source=b91967c499b23106586d7aa35af46413

运行效果如下:
在这里插入图片描述
使用模型和视图,需要添加相应的头文件,这里使用到了QStandardItemModel,所以要加

#include <QStandardItemModel>
#include "widget.h"
#include "ui_widget.h"
#include "qcustomplot.h"

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

    /* 使用构造函数来指定行和列 */
    m_pModel = new QStandardItemModel(20, 5); // 20行5列 

    m_pModel->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"班级"<<"年龄"<<"性别"<<"成绩");

    ui->tableView->setAlternatingRowColors(true);//允许隔行变色
    /**
      QHeaderView::Stretch:QHeaderView将自动调整section的大小以填充可用空间。大小不能由用户或以编程方式更改。
      */
	ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//设置伸缩模式
    ui->tableView->horizontalHeader()->setStretchLastSection(true);// 表示将最后一列填充为满表格
    ui->tableView->setModel(m_pModel);

    ui->tableView_2->setModel(m_pModel);
}

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

void Widget::on_btnClear_clicked()
{
    /* 对视图进行操作 */
    int rowCount = m_pModel->rowCount();

    /* 注意:只能从后往前删 */
    for(int r = rowCount; r>=0; --r)
	{
        m_pModel->removeRow(r);
    }

    /* 重新插入空行 */
    for(int r=0; r < rowCount; ++r)
	{
        m_pModel->insertRow(r);
    }
}

说一下什么叫做 将最后一列填充为满。
此外,还需要注意下是怎样达到逐行变色的。
在这里插入图片描述

三、QStandardItemModel/QListView

在这里插入图片描述
widget.cpp

在这里插入图片描述
运行代码,显示如下。
在这里插入图片描述
在这个视频的最后还介绍了样式表的简单使用,因不是本节重点,没有记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行 测试|测试开发 面试真题|面经 汇总

招银测开面经 一面 1.面向对象3大特征 2.java是否能多继承&#xff0c;怎么实现多继承 3.抽象类 4.数据库特性&#xff0c;隔离级别 5.sql语句查找 6.static关键字的使用 7.手撕&#xff1a;寻找字符串出现频率最高的字符 8.代码改进和测试 二面 1.先闲聊了几句&…

Python面向对象编程

本篇内容: 1、反射  2、面向对象编程  3、面向对象三大特性  4、类成员  5、类成员修饰符  6、类的特殊成员  7、单例模式 反射 python中的反射功能是由以下四个内置函数提供&#xff1a;hasattr、getattr、setattr、delattr&#xff0c;改四个函数分别用于对对象…

m基于GA遗传算法的高载能负荷响应优化控制模型matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 高载能企业执行子站接收负荷调整指令后&#xff0c;需将有功功率、无功功率调整总量合理分配给各用能设备/系统。研究高载能负荷响应优化控制模型&#xff0c;建立以高载能企业响应效益最优为目标…

ccf序列查询新解python满分_纯数学规律(学霸怎么想到的啊......)

题目 思路和代码 这题我也就看了好几个小时吧。终于&#xff01;有点懂了&#xff01; 上午看懂了用双指针写《下一个排序》后就在看这题。70分的代码很好写也很好想&#xff0c;就是模拟fx和gx&#xff0c;然后遍历一趟&#xff0c;得到最终的结果。 看了学霸的代码&#x…

使用桥梁振动自动识别车辆(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Qt在线安装教程(详细图文)

Qt在线安装教程&#xff08;详细图文一、前言二、QT账号的注册三、QT的安装的镜像四、安装的过程一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;小伙伴们&#xff0c;让我们一起来学习Qt在线安装。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、QT账号…

js-mark新时代的网页标记容器

js-mark &#x1f58d;️️ ✨ 它提供了一组可交互操作的工具来注释网页内容 ✨&#x1f58d;️ js-mark是一个JavaScript库&#xff0c;用于在浏览器。他是一个可以在任何网页做标记的前端库, 它提供了一组可交互操作的工具来注释网页内容。 支持标记文本和 持久化存储与还原…

LSTM和双向LSTM讲解及实践

目录&#xff1a; RNN的长期依赖问题LSTM原理讲解双向LSTM原理讲解keras实现LSTM和双向LSTM RNN 的长期依赖问题 在上篇文章中介绍的循环神经网络RNN在训练的过程中会有长期依赖的问题&#xff0c;这是由于RNN模型在训练时会遇到梯度消失(大部分情况)或者梯度爆炸(很少&…

网络1323的分类行为

( A, B )---2*30*2---( 1, 0 )( 0, 1 ) 用网络分类A和B&#xff0c;让A是&#xff08;0&#xff0c;1&#xff09;&#xff08;1&#xff0c;1&#xff09;&#xff0c;让B是&#xff08;1&#xff0c;0&#xff09;&#xff08;1&#xff0c;1&#xff09;。测试集为&#xf…

[附源码]计算机毕业设计springboot学生在线考试系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

408 考研《操作系统》第一章第三节:中断和异常、系统调用

文章目录教程1.中断和异常1.1 中断的作用1.2 中断的类型1.2.1 外中断的处理过程1.2.1 内中断的处理过程1.3 中断机制的基本原理1.4 总结2. 系统调用2.1 什么是系统调用&#xff1f;2.2 小例子&#xff1a;为什么系统调用是必须的&#xff1f;2.3 什么功能要用系统调用实现&…

m基于随机接入代价的异构网络速率分配算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 无线接入技术发展迅速&#xff0c;异构网络并存的现象普遍存在&#xff1b;同时&#xff0c;随着终端用户数量的剧增、业务类型的多样化和高服务质量多媒体数据业务需求的增加&#xff0c;通过异…

磨金石教育插画技能干货分享|插画怎么配色才好看?

在绘画界&#xff0c;配色是非常重要的步骤&#xff0c;一幅作品能够展现出什么样的品质&#xff0c;配色起着举足轻重的作用。颜色配的好会给作品晋商添花&#xff0c;配的不好&#xff0c;就会让作品失去水准&#xff0c;缺少神韵。 所以想学好插画&#xff0c;就要在在配色上…

python离线环境下安装第三方模块的方法

一.背景 1.背景&#xff1a; 在实际开发中&#xff0c;我们自己电脑上方便上网可以随时安装自己需要的包文件&#xff0c;但是有的项目现场不能联网或者现场是“内网”不具备联网条件&#xff0c;所以必须解决在“离线电脑上”安装需要的软件包的问题。 2.环境说明以及实现步…

SpringCloud微服务项目实战 - 项目搭建

面对大河我无限惭愧 我年华虚度空有一身疲倦 系列文章目录 项目搭建app登录 一、项目介绍 1. 项目背景 项目概述&#xff1a; 类似于新闻头条&#xff0c;是一个新闻资讯类项目 &#xff08;这里之后放项目APP端的截图&#xff09; 技术架构&#xff1a; 项目术语&…

Ubuntu18.04安装ROS、Gazebo、Mavros、PX4、QGC教程

修改国内源 修改apt sudo cp /etc/apt/source.list /etc/apt/source.list.old sudo gedit /etc/apt/source.list输入如下进行保存 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic m…

转行|什么是游戏建模??小本本记下来

今天来说一下游戏建模…小本本记下来 &#x1f440;3D手绘建模 3D美术设计师根据原画设计师的构思&#xff0c;将二维的东西在3D软件里面制作出来&#xff0c;最终得到的东西是模型( 3Dmax )和贴图&#xff08;软件PS、Bodypaint ) &#xff0c;模型是物体的主要构架&#xff…

Kaggle Feedback Prize 3比赛总结:两种模型设计思路

比赛的目标&#xff1a;本次竞赛的目标是评估8-12年级英语学习者&#xff08;ELLs&#xff09;的语言能力。利用英语学习者所写的论文数据集开发出能更好地支持所有学生的能力模型&#xff0c;帮助ELL学生在语言发展方面得到更准确的反馈&#xff0c;并加快教师的评分周期。 方…

RestTemplate使用InputStreamResource上传文件

背景 1. 我们应用服务是Spring boot项目&#xff0c;预览服务是我们另一个团队提供的用.net写的&#xff0c;最终使用的是office online来实现文件预览的功能。 2. 我们文件在阿里云OSS存储&#xff0c;我们需要预览文件需要将文件上传至预览服务器。 3. 计划使用RestTemplate…