醋醋百科网

Good Luck To You!

Qt高仿Excel表格组件-冻结列、冻结行、内容自适应和合并单元格

一、概述

最近看到一个比较炫酷的表格效果,冻结表格列功能。经常使用excel的人应该都使用过这个功能,当我们想把一些重要的信息一直固定在界面上时,就得使用冻结行或者冻结列的功能。

【小白课程】openKylin便签贴的设计与实现

openKylin便签贴作为侧边栏的一个小插件,提供便捷的文本记录和灵活的页面展示。openKylin便签贴分为两个部分:便签列表

Qt开发经验小技巧221-225_qt软件开发

221. 在对表格数据模型操作的时候,经常遇到一种场景就是,删除某条记录后,希望重新选中某一行。QTableView、QTableWidget本身就支持多选全选等操作,比如批量删除可以多选。

//拿到表格数据模型
QAbstractItemModel *model = ui->tableView->model();
//主动定位到第三行
ui->tableView->setCurrentIndex(model->index(3, 0));
//主动定位到最后一行
ui->tableView->setCurrentIndex(model->index(model->rowCount() - 1, 0));

//设置选择模式支持多选,其他几个枚举值自行查阅文档。
ui->tableView->setSelectionMode(QAbstractItemView::MultiSelection);

//选择全部
ui->tableView->selectAll();
//取消所有选中
ui->tableView->clearSelection();

//选中行,注意如果该行选中则执行后取消选中,如此往复。这个设计很巧妙,掌声。
ui->tableView->selectRow(row);
//选中列,注意如果该列选中则执行后取消选中,如此往复。这个设计很巧妙,掌声。
ui->tableView->selectColumn(column);

//获取选中行的内容
QItemSelectionModel *selections = ui->tableView->selectionModel();
QModelIndexList selected = selections->selectedIndexes();
foreach (QModelIndex index, selected) {
    qDebug() << index.row() << index.column() << index.data();   
}

Qt编程进阶(21):Qt操作SQLite数据库及实例

QtSql模块

Qt提供的QtSql模块实现了对数据库的访问,同时提供了一套与平台和具体所用数据库均无关的调用接口。此模块为不同层次的用户提供了不同的丰富的数据库操作类。例如,对于习惯使用SQL语法的用户,QSqlQuery类提供了直接执行任意SQL语句并处理返回结果的方法;而对于习惯使用较高层数据库接口以避免使用SQL语句的用户,QSqlTableModel和QSqlRelationalTableModel类则提供了合适的抽象。

C++Qt开发——Mode View(模型视图)

Model/View(模型/视图)结构

简介

Model/View(模型/视图)结构是 Qt 中用界面组件显示与编辑数据的一种结构,视图(View)是显示和编辑数据的界面组件,模型(Model)是视图与原始数据之间的接口。

GUI 应用程序的一个很重要的功能是由用户在界面上编辑和修改数据,典型的如数据库应用程序。数据库应用程序中,用户在界面上执行各种操作,实际上是修改了界面组件所关联的数据库内的数据。

从零开始学Qt(34):数据模型、视图组件和代理

数据模型

所有的基于项数据(item data)的数据模型(Model)都是基于QAbstractltemModel类的,这个类定义了视图组件和代理存取数据的接口。数据无需存储在数据模型里,数据可以是其他类、 文件、数据库或任何数据源。Qt中与数据模型相关的几个主要的类的层次结构如图所示。

图中的抽象类是不能直接使用的,需要由子类继承来实现一些纯虚函数。Qt提供了一些模型类用于项数据处理,常见的几个见下表。

Qt model/view 架构_qt中model

有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的 Qt 要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改的地方写回,然后刷新组件进行显示。这个思路很简单,也很清晰,但是对于大型程序,这种设计就显得苍白无力。比如,在一个大型系统中,你的数据可能很大,全部存入一个组件的数据对象中,效率会很低,并且这样的设计也很难在不同组件之间共享数据。如果你要几个组件共享一个数据对象,要么你就要用存取函数公开这个数据对象,要么你就必须把这个数据对象放进不同的组件分别进行维护。

Qt Model View 框架_qt mvvm框架

Model-View及Qt实现

Model-View-Controller架构最早出现在SmallTalk语言中,至今出现了很多变体。

Model是负责维护数据(如管理数据库),View负责显示与用户交互(如各种界面),Controller将控制业务逻辑。这种分层的做法在大型程序中使得数据、逻辑与界面分离,便于维护更新。

Qt模型视图架构:让百万级数据列表&quot;丝滑滚动&quot;的核心

为什么你的列表控件一到10万行就卡顿?

说白了,传统控件(QTableWidget/QListWidget)有三大致命伤:

  • 对象爆炸:每个单元格创建独立对象!10万行×7列=70万个对象在内存打架
  • 内存冗余

Qt自定义Model_QT自定义openfileDialog

众所周知,Qt提供了一套Model/View框架供开发者使用,Model用来提供数据, View则用来提供视觉层的显示。实际上这是一套遵循MVC设计模式的GUI框架,因为Qt还提供了默认的Delegate作为Controller来作为控制器。

MVC的好处这里就不多说了,为了开发者使用方便,Qt还提供了基于项(Item)的Model/View实现----QXxxWidget(QTableWidget、QListWidget等),对于一些简单的应用场景,这已经足够了并且使用起来非常方便。这里我们简单介绍下如何使用自定义的数据模型,来满足各种花式的要求。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言