自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(686)
  • 收藏
  • 关注

原创 QItemDelegate

它是 Model/View 架构中的一部分,通过与模型和视图的交互,实现对 Item 的定制。我们希望定制化完成状态列的显示效果,使用自定义的图标来表示任务的完成状态,并提供一种交互方式来切换任务的完成状态。通过重写委托类的函数,我们可以实现自定义的绘制、编辑和数据更新逻辑,以满足特定的需求。接下来,我们需要创建一个自定义的委托类,继承自 QItemDelegate,并重写其虚函数以实现定制化的显示和编辑逻辑。最后,我们将自定义的委托类应用到特定的列或 Item 视图中,以实现定制化的显示和编辑效果。

2024-02-21 18:21:43 883

原创 tableview

【代码】tableview。

2024-01-31 11:00:45 855

原创 treeview treemodel

代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qml/TestQml_20220422_Qt6TreeView。//视图中只有一列将用于绘制树,因此,只有该列中的delegate Item项才会将此属性设置为true。//其他列中的delegate Item将将此属性设置为,并将显示模型中其余列的数据(通常不缩进)。//其他列中的delegate Item将将此属性设置为,并将显示模型中其余列的数据(通常不缩进)。

2024-01-29 11:12:53 420

原创 treeview

代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qml/TestQml_20220422_Qt6TreeView。//视图中只有一列将用于绘制树,因此,只有该列中的delegate Item项才会将此属性设置为true。//其他列中的delegate Item将将此属性设置为,并将显示模型中其余列的数据(通常不缩进)。//其他列中的delegate Item将将此属性设置为,并将显示模型中其余列的数据(通常不缩进)。

2024-01-29 11:10:48 885

原创 treeview

ctx.moveTo(width/2,0) //如果第一个item虚线是从左侧拉过来,要改很多。ListView 文档:https://doc.qt.io/qt-5/qml-qtquick-listview.html。//此外还有5的偏移是因为我image是透明背景的,为了不污染到图标。代码github:https://github.com/gongjianbo/QmlTreeView。思路参考:https://github.com/peihaowang/QmlTreeWidget。

2024-01-29 10:59:52 854

原创 QTableWidget

QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。是QTableView的子类,使用的是标准的数据模型,其单元格数据是通过QTableWidgetItem对象来实现。//添加数据时,一定要设置行数,否则数据不会展示出来。

2024-01-03 16:12:35 384

原创 delete 和 delete []的真正区别

如果你的类使用了操作系统资源,单纯把类的对象从内存中删除是不妥当的,因为没有调用对象的析构函数会导致系统资源不被释放,如果是Socket则会造成Socket资源不被释放,最明显的就是端口号不被释放,系统最大的端口号是65535(216 _ 1,因为还有0),如果端口号被占用了,你就不能上网了,呵呵。这些资源的释放必须依靠这些类的析构函数。所以,在用这些类生成对象数组的时候,用delete[]来释放它们才是王道。我们来看下面的例子,通过例子的学习了解C++中的delete和delete[]的使用方法。

2024-01-03 09:14:35 890

原创 thread

这里要注意的一点是,如果设置一个线程为分离线程,而这个线程运行又非常快,它很可能在pthread_create函数返回之前就终止了,它终止以后就可能将线程号和系统资源移交给其他的线程使用,这样调用pthread_create的线程就得到了错误的线程号。设置线程绑定状态的函数为pthread_attr_setscope,它有两个参数,第一个是指向属性结构的指针,第二个是绑定类型,它有两个取值:PTHREAD_SCOPE_SYSTEM(绑定的)和PTHREAD_SCOPE_PROCESS(非绑定的)。

2023-12-22 10:49:22 507

原创 数据表SQL

2023-12-14 08:54:41 442

原创 生产者消费者问题

消费者也许有很多,购买的产品也许会很多,那么缓冲池(店铺)不见得能存放足够的产品,足够的多产品应该在生产者的货仓里,而不是在店铺。同样的,消费者如果购买的很多有可能是批发商、经销商,也有自己的仓库。产品从生产者的仓库流向消费者的仓库如同沙漏,最窄的区域就是缓冲池。缓冲池空的时候,消费者不得购买(因为没有产品了),缓冲池满了的时候,生产者不得投放(因为放不下了),他们需要在这两种情况下等待对方购买拿走或投放补充。产品是有数的,投放一个,生产者仓库就少一个,缓冲池当前产品数量就多一个;

2023-12-12 17:31:45 443

原创 注册与回调

在之前的博文中, 我们探讨过映射的重要作用, 请直接看:http://blog.csdn.net/stpeace/article/details/39452203, 在那篇文章中, 我们是用STL中的map来做的, map建立的是key-value映射, 在本文中, 我们自己来建立映射, 并讨论一个更为复杂的程序, 顺便再次复习一下注册与回调。28 // 执行类, 提供注册, 查找接口, 并执行回调操作。28 // 执行类, 提供注册, 查找接口, 并执行回调操作。74 // 执行回调操作。

2023-12-12 16:36:58 1132

原创 【无标题】

一个有效的std::future对象只能通过 std::async(), std::future::get_future 或者 std::packaged_task::get_future 来初始化。我们前面介绍的std::thread 是C++11中提供异步创建多线程的工具,只能是异步运行任务,却无法获取任务执行的结果,一般都是依靠全局对象,全局对象在多线程下是及其不安全的,为此标准库提供了std::future类模板来关联线程运行的函数和函数的返回结果,这种获取结果的方式是异步的。

2023-12-12 16:35:04 345

原创 std::asyncstd::asyncstd::asyncstd::async

std::launch::async 和 std::launch::deferred 是用于控制 std::async 函数的执行策略的标志,它们决定了异步任务的行为。默认情况下,如果不指定策略,std::async 的行为由 C++ 标准库实现决定,可以是 std::launch::async 也可以是 std::launch::deferred,取决于具体实现。在这个示例中,我们首先使用 std::launch::async 和 std::launch::deferred 策略调用了 foo 函数。

2023-12-12 16:28:14 853

原创 c++11新特性之future-PROMISE

std::packaged_task包装了一个可调用的目标(如function, lambda expression, bind expression, or another function object),以便异步调用,它和promise在某种程度上有点像,promise保存了一个共享状态的值,而packaged_task保存的是一个函数。});thread库提供了future用来访问异步操作的结果什么是异步操作,为何会有异步操作?

2023-12-12 16:20:52 921

原创 注册与回调

11 // B模块向外提供的回调函数注册接口, 也就是说,提供注册服务, 想注册的,调用该接口即可。11 // 公司提供登记服务, pf指向员工登记的某行为,比如提前登记获许在公司喝酒。14 // 公司记录该员工已经登记获许的行为,比如可以在公司内喝酒。19 // 在公司内, 发生了该事件 :员工在公司内抽烟,被抓住了。42 // A模块利用B模块的注册接口, 向B模块注册。34 // 员工将要登记的行为,即登记在公司内获许喝酒。18 // B模块的某函数, 在一定条件下被触发。

2023-12-12 14:55:29 859

原创 【无标题】

装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。如果我们从对象标识的观点出发,一个被装饰了的组件与这个组件是有差别的,因此,使用装饰时不应该依赖对象标识。即将一个类对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator)装饰对象的接口必须与它所装饰的Component的接口是一致的。print("姓名");

2023-12-12 14:35:15 783

原创 友元c++

void Lovers::kiss(Lovers *lover)//Lovers *lover表示定义Lovers类的一个对象*lover。cout << "宝贝儿" << lover->name << "帮我" << something << endl;//祸根,交友不慎。cout << name << "亲亲我们家的" << lover->name << endl;cout << name << "亲一下" << lover->name << endl;传说中的路人甲登场啦。

2023-12-12 14:26:50 369

原创 装饰模式-设计模式

动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。其别名也可以称为包装(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。根据翻译的不同,装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式。装饰模式用于动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。抽象构件定义了对象的接口,可以给这些对象动态增加职责(方法);具体构件。

2023-12-12 14:10:31 999

原创 友元c++

友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性。

2023-12-12 11:21:50 862

原创 bridge

std::cout

2023-12-12 11:05:27 322

原创 函数对象是什么

刚开始看到这个名字,还以为是函数呢,谁知道大错特错!顾名思义,就是在某种方式上表现得象一个函数的对象。典型地,它是指一个类的实例,这个类定义了应用操作符operator()。函数对象是比函数更加通用的概念,因为函数对象可以定义跨越多次调用的可持久的部分(类似静态局部变量),同时又能够从对象的外面进行初始化和检查(和静态局部变量不同)。例如:int val;public:} // 取得值} // 应用Sum s = 0;

2023-12-06 15:31:32 845

原创 std::move

如果 unique_ptr 为右值,就可以将它赋值给 shared_ptr。因为 shared_ptr 包含一个显式构造函数,可用于将右值 unqiue_ptr 转换为 shared_ptr,shared_ptr 将接管原来归 unique_ptr 所拥有的对象。// 这里系统会为shared_ptr创建控制块。转换成shared_ptr类型。

2023-12-06 10:10:01 519

原创 为什么unique的拷贝构造函数和复制函数被delete了

2023-12-01 15:22:13 497

原创 CCCCCCC指针CCCCC

C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。所以智能指针主要解决内存泄漏的问题,使用智能指针可以自动释放。C++里面的四个智能指针: ~~auto_ptr~~,其中后三个是C++11支持,并且第一个已经被C++11弃用。

2023-11-24 16:53:54 1305

原创 智能指针C++

存在的问题:当多个智能指针指向同一堆内存时,新智能指针具有管理权,原智能指针指向空,导致原智能指针失效。(5)weak_ptr:不可单独使用,常与强智能指针结合使用,以解决强智能指针相互引用的问题。存在的问题:内存浪费严重(对于每一块堆内存,都在栈上生成一个智能指针对象,由该对象指向它)存在的问题:释放权的转移可能导致堆内存的提前释放,而使其他智能指针的使用出错。(3)scope_ptr:一个智能指针只能指向一个堆内存,不允许权限转移。(2)带标志位的auto_ptr:管理权不唯一,释放权唯一。

2023-11-21 10:43:54 81

原创 移动语义 和 完美转发

【2】完美转发: 完美转发是指在函数模板中保持参数的值类别(左值或右值)并将其转发到其他函数,以实现泛型编程中的通用参数传递。需要注意的是,移动构造函数的实现通常是将源对象指针设置为 nullptr,以确保在析构时不会释放已经被转移的资源。C++ 中的右值引用(Rvalue reference)是一种引用类型,它用于绑定到临时对象或将要被移动的对象(右值)。需要注意的是,在使用完美转发时,通常需要使用模板函数,并搭配通用引用的语法。这样可以保持参数的原始类型,并进行类型推导,从而实现泛型编程中的参数转发。

2023-11-14 18:21:08 99

原创 osg绘制点线面

绘制一个贴地形的区域,地形起伏处可以看到面填充与地面贴合(示例在北京范围):主要起作用的Symbol是 osgEarth::AltitudeSymbol,它的osgEarth::AltitudeSymbol::CLAMP_TO_TERRAIN属性。属性,否则默认是闭合的线。建议自行建立工程后,编译源码后进行测试(内含main.cpp),随时修改以及时看到变化情况,了解各个参数对绘制的影响。(相比上面的2D图元绘制的代码,3D图元绘制的资源内,封装了对绘制属性的设置修改,即封装成类,提供到接口操作)

2023-10-31 16:28:58 322

原创 TMSPackager

osgearth学习笔记(一)

2023-10-31 15:53:21 94

原创 qt-gui

虽然未来结束技术预览阶段暗示着具有兼容性保证,但Qt支持Python兼容性与C++的兼容性声明不一样,前者是用特殊的语法公开Qt的C++ API,任何使用Qt 5.12支持Python的应用程序,都应该继续兼容于未来的版本。虽然官方期望支持Python的部分,可以基于Qt版本同时发布,但目前还无法达成。C++的GUI接口开发框架Qt宣布,在5.12版本中开始支持Python,Python开发人员现在可以使用所有的Qt API,目前仍在技术预览版的阶段,但官方也承诺,正式版将在不久后推出。

2023-10-31 14:54:04 117

原创 c++的小指针

QByteRef的operator=会修改字节数组元素的值,如果数组索引下标越界则会自动扩展数组内存。所以编译通过,而且运行正常。QByteArray的operator[]会返回QByteRef对象。C:编译通过,运行出现错误但是并不会导致程序退出。B:编译通过,运行时QT抛出异常导致程序退出。2,关于字符和字符串的说法。A:编译通过,运行正常。D:编译错误,无法运行。

2023-10-13 09:43:23 84

原创 钩子代理委托回调函数

先蹲个坑。

2023-10-09 17:08:02 56

原创 QT tableview 实现千万数据加载,内存消耗小

因为自己之前开发的工具也有类似的功能,但是效果没有这个好,于是研究了一下工具的源码,按照源码中的方法自己实验了一下tableview的用法。原文链接:https://blog.csdn.net/cwei231/article/details/131947874。//返回指定位置表头。if (role == Qt::DisplayRole) { //角色为显示。

2023-10-08 11:11:08 284

原创 跨qml通信

/3.用loader.item.方法.connect(槽)连接信号。//加载其他文件中的组件 不需要声明称Component。//1.用loader.item.属性 访问属性。//清除上一个组件的内存。//2.loader.item.方法 访问方法。

2023-10-08 11:02:55 261

原创 QT内存管理

(5)父子关系:父对象、子对象、父子关系。这是Qt中所特有的,与类的继承关系无关,传递参数是与parent有关(基类、派生类,或父类、子类,这是对于派生体系来说的,与parent无关)(2)QWidget及其派生类的对象,可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构该对象)。(1)QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象。参考Qt浅谈之一:内存泄露 - 知乎 (zhihu.com)Qt的半自动化的内存管理。

2023-10-07 08:52:57 184

原创 回调函数c++

由上知道:函数指针函数的声明之间唯一区别就是,用指针名(*fp)代替了函数名Invoke,这样这声明了一个函数指针,然后进行赋值fp=Invoke就可以进行函数指针的调用了。(1)概念:回调函数,顾名思义,就是使用者自己定义一个函数,使用者自己实现这个函数的程序内容,然后把这个函数作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。//定义一个函数指针的数组,这里的f是一个函数指针。

2023-09-21 13:24:41 53

原创 内存--堆栈

2023-08-21 11:12:05 55

原创 环境搭载vscode

把"${fileDirname}\\${fileBasenameNoExtension}.exe"改为"${workspaceFolder}\\${workspaceRootFolderName}.exe",可以把编译输出的文件名命名为工作区文件夹名字。把"${fileDirname}\\${fileBasenameNoExtension}.exe"改为"${workspaceFolder}\\myProgram.exe",可以把编译输出的文件名命名为 “myProgram.exe”。

2023-07-06 10:33:34 789

原创 SQL解析相关文件【2】

MySQL内核源码解读-SQL解析一AIOPS_DBA 关注 1人评论 11817人阅读 2018-10-15 17:43:45本文是基于MySQL5.7.22进行分析1. SQL总体执行流程图通过上面图,可以从全局上了解SQL语句执行流程以及与其他模块交互1.1 SQL查询执行流程2. 语法解析2.1 编程语言知识回顾在介绍具体的MySQL数据库解析SQL之前...

2020-04-08 17:19:44 543

原创 数据挖掘

主成分分析属性关联分析一、如何将商业运营问题转化为大数据挖掘问题那么,问题来了,我们该如何把上述的商业运营问题转化为数据挖掘问题?可以对数据挖掘问题进行细分,分为四类问题:分类问题、聚类问题、关联问题、预测问题。1、分类问题用户流失率、促销活动响应、评估用户度都属于数据挖掘的分类问题,我们需要掌握分类的特点,知道什么是有监督学习,掌握常见的分类方法:决策树...

2020-03-17 21:29:35 328

原创 KAFKA

rdkafka接口说明原创 mfslx 发布于2017-12-26 17:14:45 阅读数 5163 收藏展开一、主要数据结构1、typedef struct rd_kafka_conf_s rd_kafka_conf_t;rd_kafka_conf_t是kafka的全局配置结构,通过rd_kafka_conf_new()创建,创建时即进行了默认配置,通过rd_kafka_c...

2020-03-17 21:27:45 918

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除