- 博客(279)
- 资源 (3)
- 收藏
- 关注
原创 【Qt之模型视图】5. Qt库提供的视图便捷类
Qt提供了一些便捷的视图类,如QListWidget提供项目列表,QTreeWidget显示多级树结构,QTableWidget提供单元格项的表格。每个类都继承了QAbstractItemView类的行为,QAbstractItemView类实现了项目选择和标题管理的通用行为。这三个类使用起来方便,但适合于少量数据的存储与显示(存储个几万、十几万的数据还可以),因为它们三个没有将视图和模型进行分离,因此没有视图类灵活。而且这三个类也不能和模型一起使用。
2024-01-21 22:33:19 2392 1
原创 【Qt之模型视图】4. 委托及自定义委托
接下来,使用自定义委托QSpinBox来提供编辑工具,主要用于显示整数的模型。先设置一个自定义的基于整数的表模型,因为自定义委托控制数据输入。之后创建一个表视图来显示模型的内容,使用自定义委托进行编辑。可以继承来实现自定义委托。创建自定义委托需要实现// 创建自定义Widget// 设置数据到控件// 设置数据到模型// 更新控件尺寸(editor);(editor);
2024-01-18 23:11:43 1449
原创 【Qt之模型视图】3. 视图类及使用
在MVC架构中,视图通过与模型交互,将数据项进行显示。在此还需要再一次声明,数据的呈现方式可能与底层存储数据项的数据结构完全不同。数据和显示能够分离,是因为使用了提供了统一接口,和提供了一个标准视图接口,以及使用模型索引提供了一个通用方法表示数据。视图从模型获取数据,在界面显示,可以自己渲染数据项,也可以使用委托进行渲染。在使用视图,需要创建一个视图,然后设置模型,如果不设置模型,也可以使用视图,但没内容。除了呈现数据,视图还处理项之间的导航和部分项目选择。
2024-01-18 23:11:15 954
原创 【Qt之模型视图】2. 模型类及QModelIndex模型索引、自定义模型
当需要为一个数据结构创建一个新的模型时,当然要考虑使用哪种模型为数据提供接口。如果数据结构为列表或表格,可以子类化和。因为这俩个抽象类提供了不错的默认实现。如果数据结构表现为树结构,就需要子类化以下是子类化的示例,包括编辑、插入、删除功能。首先实现显示只读功能.hQ_OBJECTpublic:private:.cppm_sl = sl;if(!
2024-01-17 21:48:51 2233
原创 Qt QSQlite数据库插入字符串中存在单个双引号或单个单引号解决方案
当进行数据库写入或更新时,有时会遇到存在字符串中包含单个双引号或者单引号。
2024-01-13 23:02:08 1466
原创 Qt QTableView和QStandardItemModel包含搜索出现的文本及隐藏顶层节点
使用Qt进行开发时,树结构一般是使用QTreeWidget或使用QTreeView+QStandardItemModel结合。
2024-01-11 22:32:04 746
原创 Qt 智能指针QScopedPoint用法
QScopedPointer类用于存储一个指向动态分配的对象的指针,并在对象销毁时自动删除它。手动管理堆分配的对象是困难且容易出错的。常见的后果是代码内存泄漏,难以维护。QScopedPointer是一个小工具类,通过将基于堆栈的内存所有权分配给堆分配,一般称资源获取即初始化(RAII),从而大大简化了这一点。QScopedPointer保证当当前作用域消失时,所指向的对象将被删除。当使用QScopedPointer时,可以确保在函数退出时,所分配的对象会被自动删除,从而避免了内存泄漏。
2024-01-10 22:18:52 1493
原创 【Qt之Quick模块】8. Quick基础、布局管理、布局管理器
Qt Quick编程,提供了多种布局方式。如,静态布局,可以使用组件的x、y属性进行设置,或者进行绑定。还可以使用锚anchors进行布局。此外,还可以使用定位器以及定位管理器为多组件进行布局。但使用布局管理器和锚会占用内存和实例化时间,若使用x、y、width、height等属性能完成需求,两者相较取其轻,则尽量就不要用布局管理器和锚进行布局了。
2024-01-10 21:58:49 1278
原创 Qt读取文件对比:每次获取自定义的长度和使用系统的API,耗时对比
以下是三种方式,按行读取,测试所用耗时。QString strInfo = QString("line : 第 %1 行, info : %2").arg(QString::number(nLineNum), ba);if(!return;// 如果内容中有中文需要添加以下代码,不然含有中文时乱码while(!while(true) // 每次解析读到的m_nMaxSize数据if(-1 == nPosTmp) // 当没有找到以"\r\n"为分割的内容时,返回 -1。
2024-01-08 22:24:39 845
原创 【Qt之Quick模块】6. QML语法详解_4 集成QML和JavaScript
QML应用程序的程序逻辑可以用JavaScript定义。JavaScript代码可以在QML文档中内联定义,也可以分离到JavaScript文件中(在QML中称为JavaScript资源)。QML中支持两种不同类型的JavaScript资源:代码隐藏实现文件和共享(库)文件。这两种JavaScript资源都可以被其他JavaScript资源导入,或者包含在QML模块中。
2024-01-04 04:00:00 1102
原创 QProgressDialog用法及结合QThread用法,四种线程使用
类提供耗时操作的进度条。进度对话框用于向用户指示操作将花费多长时间,并演示应用程序没有冻结。此外,还可以给用户一个中止操作的机会。进度对话框的一个常见问题是很难知道何时使用它们;操作在不同的硬件上花费不同的时间。为这个问题提供了一个解决方案:它估计操作将花费的时间(基于步骤的时间),并且仅在估计超过(默认为4秒)时才显示它自己。使用和或构造函数设置操作中的“steps”数,并在操作进行时调用setValue()。steps数可以任意选择。
2024-01-03 21:35:16 3236
原创 【Qt之Quick模块】7. Quick基础、常用组件Item、Rectangle、Text、TextInput、TextEdit等
Qt Quick模块是编写QML应用程序的标准库。Qt QML模块提供QML引擎和语言基础结构,Qt Quick模块提供用QML创建用户界面所需的所有基本类型。它提供了一个可视化画布,包括用于创建和动画化可视化组件、接收用户输入、创建数据模型和视图以及延迟对象实例化的类型。Qt Quick模块提供了一个QML API(为用QML语言创建用户界面提供QML类型)和一个c++ API(用c++代码扩展QML应用程序)。注意:一组基于Qt quick的UI控件也可用于创建用户界面。
2024-01-02 22:07:43 1592
原创 【Qt之Quick模块】6. QML语法详解_3 QML对象特性
通过注册类的Q_PROPERTY宏,可以在c++中为类型定义属性,然后在QML类型系统中注册。通过这种方式,对象声明可以更容易地向外部对象公开特定值或维护某些内部状态。属性名称必须以小写字母开头,并且只能包含字母、数字和下划线。JavaScript保留字不是有效的属性名。默认关键字是可选的,用于修改所声明属性的语义。隐式声明自定义属性会为该属性创建一个值更改信号,以及一个名为的关联信号处理程序,其中是属性的名称,第一个字母大写。
2024-01-01 16:01:35 1066
原创 二进制、位运算和掩码运算,小白鼠测试示例
二进制是一种基于两个数字0和1的数制系统。它可以表示两种状态,即开和关。所有输入电脑的任何信息最终都要转化为二进制。目前通用的是ASCII码。最基本的单位为bit。在计算机科学中,二进制是最常用的数制系统,因为计算机内部的所有数据都是以二进制形式存储和处理的。在二进制中,每个数字位被称为一个比特(bit),它可以是0或1。比特的位置从右到左依次递增,每个位置的值是2的幂。比如,最右边的比特的权重是21,即2;第三个比特的权重是2^2,即4,依此类推。
2023-12-30 18:32:00 1227
原创 Qt 对话框无边框,背景透明,不在任务栏显示,当点击对话框之外区域对话框关闭
Qt 对话框无边框,背景透明,不在任务栏显示,当点击对话框之外区域对话框关闭
2023-12-29 23:23:08 2200 1
原创 归并排序之C++实现
然后,对每个子数组进行归并排序,即不断地将两个有序的子数组合并成一个有序的数组。合并时,从两个数组的开头依次比较元素的大小,将较小的元素放入结果数组中,直到其中一个数组的元素全部放入结果数组中。然后,将剩余的元素直接放入结果数组中,得到一个有序的合并数组。这个临时数组的长度与原数组长度相同,因为最差情况下,两个子数组的元素都要合并到临时数组中。它的分治思想保证了每次都将待排序数组二分,所以排序的时间复杂度是稳定的。这样,递归的深度为logn,每层递归需要O(n)的额外空间来存放临时数组。
2023-12-26 22:45:02 576
原创 快速排序之C++实现
在递归的过程中,每层递归都需要保存一些临时变量,包括基准元素的索引、左右指针的位置等,这些变量占用的空间与递归的层数成正比。如果选择的基准元素恰好是数组的最大或最小值,那么每次划分都只能将一个元素移到它的最终位置上,这样快速排序的时间复杂度将会退化为O(n^2)。每次划分的时间复杂度为O(n),其中n为待排序数组的长度。快速排序是一种常用的排序算法,它的思想是选取一个基准元素,将数组分成左右两部分,使得左边的元素都小于等于基准元素,右边的元素都大于等于基准元素,然后递归地对左右两部分进行快速排序。
2023-12-25 23:12:34 542
原创 选择排序之C++实现
选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是:每一轮从待排序的数据中选择最小(或最大)的一个元素,然后与待排序数据的第一个元素交换位置。对剩余未排序的数据重复这个过程,直到所有数据排序完成。选择排序的时间复杂度为O(n^2),其中n为待排序的数组长度。选择排序的空间复杂度为O(1),只需要常数级别的辅助空间。
2023-12-25 22:45:26 1070
原创 插入排序之C++实现
插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的数据序列分为已排序和未排序两部分,每次从未排序序列中取出一个元素,然后将它插入到已排序序列的适当位置,直到所有元素都插入完毕,即完成排序。根据循环次数,插入排序的平均时间复杂度为O(n。插入排序的空间复杂度为O(1)。
2023-12-24 23:00:20 830
原创 【Qt之Quick模块】6. QML语法详解_1 基础语法与三种导入语句
【Qt之Quick模块】6. QML语法详解_1 基础语法与三种导入语句
2023-12-24 21:55:45 1701
原创 【c++】 error: invalid conversion from ‘int‘ to ‘enumType‘ [-fpermissive]解决方案
【c++】 error: invalid conversion from ‘int‘ to ‘enumType‘ [-fpermissive]解决方案
2023-12-19 20:37:39 1179
原创 【Qt】使用QDataStream向QByteArray内读写数据时,输出QByteArray数据为空解决方案
【Qt】使用QDataStream向QByteArray内读写数据时,输出QByteArray数据为空解决方案
2023-12-17 22:25:45 1672
C++&&Qt + 进度框&&线程使用 + 处理耗时操作
2024-01-02
“Qt”+“C++”+QTableWidget控件自定义表头,合并,重写样式
2023-09-07
Qt多线程编程实例_QThread详解
2021-12-18
Qt多线程编程实例_QThread用法详解
2021-12-18
Qt之网络编程Tcp通信实例
2021-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人