自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Qt源码】窥视信号槽实现机制

上述两段代码摘自Qt5.12.12的源码,粗略查看下信号槽实现机制,对于很多细节完全没有关注,后续有时间应该要更加细致的拜读下。

2025-02-25 23:51:38 204

原创 【Qt之QQuickWidget】QML嵌入QWidget中

对qwidget嵌入qml的操作,qt提供了两种方式,(1) QQuickView 和 QWidget::createWindowContainer ()结合使用,但存在堆栈限制问题被放弃;由于我项目开始使用Widgets,换公司后直接使用QML开发,没有了解过如何实现widget到qml过渡,恰逢面试时遇到一家公司希望从widget迁移到qml开发,询问相关实现,一时语塞,很尴尬,粗略研究并总结下。对于网上反应的某些信号获取不到,测试后没发现问题,不知道是不是版本问题,我测试版本为Qt5.12.12。

2025-02-24 00:57:50 493

原创 QML的属性绑定

QML绑定方式有多种,简单来说有直接绑定、Binding绑定和Qt.Binding等方式,但是如果其中存在一个小坑就是绑定失效的问题,如果一个属性多次直接绑定,则会导致所有绑定都会失效。如果希望多次绑定的话可以按照Qt官方介绍的使用Qt.binding重新绑定,使当前绑定方式生效,后续不会失效。Qt官方也在property binding中介绍了这种情况,之前没有细看文档,遇到失效问题感到很纳闷。

2025-02-13 00:08:34 166

原创 Qt之QDjango-db的简单使用

QDjango是一款由C++编写、依托于Qt库的Web开发框架,其设计理念受到了广受欢迎的Python框架Django的影响。这个项目旨在提供一个高效、灵活且易于使用的工具集,帮助开发者构建高质量的Web应用。其项目地址:https://gitcode.com/gh_mirrors/qd/qdjango,项目结构中存在db和http两部分,db为Qt的ORM实现,该模块包装一下可以作为简单的ORM库使用。如果项目中不想SQL语句写的到处都是,一个简单ORM库还是有必要的,同时也能避免依赖某一种数据库。

2025-01-19 19:59:24 447

原创 QML之部分心得总结

【代码】【QML】近期开发经验与教训。

2025-01-12 23:36:30 90

原创 QML之QQuickFramebufferObject

在大多数平台上,渲染将在专用线程上进行。在以QML和C++混合编程的项目开发中遇到涉及到视频播放的需求,预研过程中发现如果直接使用QML中Image来一帧帧显示图像,导致帧率相当感人,在嵌入式ARM-Linux环境中可能仅有2-3帧/秒。在寻找相关解决方法时偶然看到Qt中QQuickFramebufferObject类可以结合QOpenglFunctions来显示图片解决该问题,实际开发完成后测试基于上述解决方法在同样嵌入式环境中可以达到15帧/秒以上的显示,效果达到目标设计。

2024-07-31 23:00:27 770

原创 Qt之TinyXML2

Qt没有引入QtXml模块以前,采用第三方库解析Xml数据是不得已的选择,其中Tinyxml2在c++的xml解析库中是个不错的选择。先前项目使用Tinyxml作为底层XML解析库,升级为TinyXML2后文件减少成2个,接口也发生很多变化。

2024-01-22 23:15:43 296

原创 Qt之QxOrm

QxORM库是一种为了C++/Qt开发者服务的关系对象映射型数据库的类库,每个类都有简单的C++设置函数,你可以接触到如下特性:持久性:支持最常见的数据库,如 SQLite、MySQL、PostgreSQL、Oracle、MS SQL Server、MongoDB(具有 1-1、1-n、n-1 和 n-n 关系)。序列化:JSON、二进制和 XML 格式。反射(或内省):动态访问类定义、检索属性和调用类方法。

2024-01-16 21:58:00 1764

原创 【网络库学习】libevent篇

对应到libevent中,依然是select、poll、epoll等,但是libevent使用结构体eventop进行了封装,以统一的接口来支持这些I/O多路复用机制,达到了对外隐藏底层系统机制的目的。Reactor,是事件管理的接口,内部使用event demultiplexer注册、注销事件;并运行事件循环,当有事件进入“就绪”状态时,调用注册事件的回调函数处理事件。当有事件到达时,event demultiplexer会发出通知“在已经注册的句柄集中,一个或多个句柄的事件已经就绪”;

2023-11-28 23:06:44 659

原创 Boost编译

此外,boost库比较大,如果仅用部分特性的话,比如像我仅需要使用smartptr和function的,整个库全部搬过来就很大了,需要使用bcp工具进行裁剪。不过值得注意的是,window下裁剪我一直报错,Linux下裁剪没问题,可以正常使用,建议直接在Linux环境下裁剪,然后复制到win平台。对于boost开发库,部分库可以以源码形式结合到工作代码中,有的必须以库文件的形式,具体看boost的说明。了解常用的几个库的用法,罗的《Boost程序库完全开发指南》对于常用的也介绍了。Boost入门可以看。

2023-11-08 15:18:11 1170

原创 Qt之AVI录屏

/******** CScreenShot.h **************/#ifndef __CSCREENSHOT_H#define __CSCREENSHOT_H#include <QRunnable>#include <QPixmap>#include <QMutex>#include <QWaitCondition>#include <QThread>#define CollectGarbage(className)

2022-01-22 21:23:01 1431 1

原创 Qt之程序崩溃原因定位手段

由于Qt主要作为跨平台的界面库存在,在Linux环境下定位问题较Windows下难,主要记录Linux环境下Qt程序崩溃原因定位的方法。Core文件生成backtracebreakpadcrashpad

2022-01-22 20:50:56 4946

原创 Qt之Sqlite insert 方法对比

在台式机上测试Sqlite不同插入方案对比发现:select-stmt是插入速度最快的方式,事务虽然也能加快插入数据,相较于STMT还是慢了不少。#include <QCoreApplication>#include <QSqlQuery>#include <QSqlDatabase>#include <QSqlDriver>#include <QSqlError>#include <QDateTime>#includ

2021-05-09 19:43:08 996

原创 Qt之事件处理

Qt提供5种级别事件处理与事件过滤方法1. 重新实现特殊的事件处理器以QLabel为例,QLabel类中可以重写的虚函数有如下11个函数。如果期望的事件在如下10个中,就可以继承QLabel重写如下的函数。virtual void changeEvent(QEvent *ev) overridevirtual void contextMenuEvent(QContextMenuEvent *ev) overridevirtual void focusInEvent(QFocusEvent *

2021-04-18 21:05:05 300

原创 [侯捷C++面向对象高级开发] 学习笔记上

1.头文件与类声明-----------------Complex.h-------------------template <typename T>class Complex{public: Complex(T r = 0,T i = 0) //带默认实参的构造函数,r,i默认为0 :re(r),im(i) {} Complex& operator+=(co...

2020-04-12 17:20:33 229

翻译 Qt之QObject

1.梗概 QObjects会自我构建对象树,当你创建一个以另一个对象作为父对象的QObject对象时,它被加到父对象的children()列表中,同时当父对象被删除时其也被删除,这被证明是非常适应GUI的应用需求。例如,QShortcut是一个相关窗口的子对象,当用户关闭窗口时,shortcut也会被删除。2.QObject构造/析构的次序 当QObjects在堆上创建出来,对象树...

2020-04-12 17:13:15 312

原创 MISRA C 一点总结

2.语言扩展2.1 汇编语言应该通过a.汇编函数,b.C函数,c.宏三种方式封装并隔离汇编指令; 例如#define NOP asm(" NOP");2.2 源代码应该使用/*...*/类型注释,而不是使用 这样C99类型和C++类型的注释,其作为对C90的扩展;2.3 字符//* 不应该出现在注释中,因为C不支持注释的嵌套;2.4 当源代码段不需要被编译时,应当使用条件编译完成例如#i...

2020-04-12 16:38:58 705

原创 Qt之Q_PROPERTY

Qt样式表分离中需要使用到Q_PROPERTY宏,在代码现在的版本中,使用样式表主要还是使用setStyleSheet(),但是考虑到后续样式表分离,使用QSS就不得不提及Q_PROPERTY了。Qt Style Sheets Examples:https://doc.qt.io/archives/qt-4.8/stylesheet-examples.htmlQ_PROPERTY:http...

2020-04-12 16:11:34 597

原创 Qt之QSignalMapper

资料来源:https://doc.qt.io/archives/qt-4.8/qsignalmapper.htmlhttps://blog.youkuaiyun.com/mcgrady_tracy/article/details/6996947在源码中存在大量的信号转发代码,也存在极少量信号转发器代码。从上述问题来看项目源码所出现问题单最终绝大部分可以归结于信号-槽问题。在QT编程中,如果遇到多个控件,...

2020-04-12 14:14:41 231

原创 Qt之正则表达式一二三

/*** RegExpTest.h*/#include <QDialog>#include <QValidator>class QLabel;class QLineEdit;class QRegExp;class QRegExpValidator;class QVBoxLayout;class QString;class Parser : p...

2020-04-12 13:29:36 402

原创 Qt之自建标题栏

在项目中遇到QDialog在双击标题栏时对话框会最大化的情况,由于设置MaxmiumSize等都没有效果的情况下所以自建标题栏。// TitileBar.h#ifndef __TITLEBAR_H_#define __TITLEBAR_H_#include <QDialog>class QEvent;class QMouseEvent;class QPixmap;c...

2020-04-12 10:26:14 701

转载 设计模式之设计原则

名称 解释 单一职责原则 一个类只负责一项职责 里氏替代原则 父类能出现的地方都可以替换为子类,反之则不一定 依赖倒置原则 抽象不应该依赖于细节,细节应该依赖于抽象 接口隔离原则 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 迪米特法则 一个对象应该对其他对象保持最少的了解。降低类与类之间的耦合(高内聚,低耦...

2020-02-19 22:15:01 168

原创 Qt之内存数据库

内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。所以在有大量数据交互时使用内存数据库,等到数据交互量降下来以后同步至本地数据库也是个不错的选择。 下段代码是我事先将部分数据插入内存数据库,便于后续数据交互时查表使用。/** @brief 将自检信息表存入内存数据库...

2019-11-18 19:47:27 3154 2

原创 Qt之QDialog

QDialog特性: 对话框是一个顶级窗口,大多数用于临时任务和短暂交流。QDialog可能是modal或者modeless;QDialog还可以提供一个返回值;QDialog可以提供default buttons;最后QDialog用setSizeGripEnabled()还是可以在低层次中心提供一个QSizeGrip类; QDialog或者其他有Qt::Dialog类型的widge...

2019-10-26 23:27:03 1196

原创 Qt之Map嵌套对象指针的删除(其他容器也适用)

Method 1:使用qDeleteAll h: QMap<int,QString>* MapValueForWarn; QMap<int,QMap<int,QString>*>* MapCatchForWarn; QVector<QMap<int,QMap<int,QString>*>*>* VecCa...

2019-08-19 19:50:01 1949

原创 Qt之Sqlite3 Insert优化

最近在项目遇到一个问题,就是插入大量数据时启动程序会特别卡,一开始我使用线程缓解了一点,但是仍然会卡很久,今天在复习Sqlite相关内容时,突然发现了一个与我很相似的情况。究其主要原因还是执行INSERT语句时还有很大问题。在Sqlite官网关于INSERT的方式中INSERT过程中最后如果使用VALUES那条路会比select-stmt和DEFAULT -VALUES多走很多路,可能这样就导...

2019-07-31 19:43:30 971

原创 Qt之PaintEvent

从Qt官方给的例程可以看出,如果想将绘图加入事件循环共有两种方式:绘图事件和定时器事件两种方式,通常使用前者。(一) painterEvent在绘图事件中,如果想使用update()刷新页面是行不通的,除非使用新的定时器定时刷新页面。painterEvent来自QWidget的virtual protected function,其他一些控件例如QLabel、QLineEdit、QMenu...

2019-07-30 18:50:46 8679 1

原创 MISRA C 规范和 C语言的一些标准

MISRA C规范2.语言扩展2.1 汇编语言应该通过a.汇编函数,b.C函数,c.宏三种方式封装并隔离汇编指令; 例如#define NOP asm(" NOP");2.2 源代码应该使用/*...*/类型注释,而不是使用//这样C99类型和C++类型的注释,其作为对C90的扩展;2.3 字符/*不应该出现在注释中,因为C不支持注释的嵌套;2.4 当源代码段不需要被编译时,...

2019-04-09 09:09:44 1778

转载 linux内核中GNU C和标准C的区别

linux 系统上可用的C编译器是GNU C编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C对标准C进行进一步扩展,以增强标准C的功能。下面我们对GNU C中的扩展进行一下总结:1、零长度数组GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例如: struct minix_dir_entry {     __u16 inode; ...

2018-11-08 11:00:52 916

转载 Linux驱动开发常用头文件

#include &lt;linux/***.h&gt; 是在linux-2.6.29/include/linux下面寻找源文件。#include &lt;asm/***.h&gt; 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include &lt;mach/***.h&gt; 是在linux-2.6.29/arch/arm/mach-s3c2...

2018-10-17 10:58:38 218

原创 mini2440开发板-led驱动学习

mini2440烧录进自己配置的内核镜像,commandlines,文件系统,superboot,启动开发板后led一直在按照顺序闪灭,怀疑是led的程序自启动了。[root@FriendlyARM bin]# cat /etc/init.d/rcS 打开脚本后发现有段代码启动led脚本sleep 1/etc/rc.d/init.d/leds startecho " ...

2018-09-24 20:54:15 403

原创 友善之臂mini2440初入门学习的一点历程

许久之前在某宝入手一块二手mini2440开发板,因为忙毕业设计也没空玩玩,这几天在等PCB印刷出来的时间拿出来学习一下。第一步配置好开发环境:交叉编译器,使用的是友善之臂光盘里的arm-linux-gcc-4.4.3.tar.bz,VMware 装的是ubuntu 1404,但是一直不成功,好像是1404版本有点bug,也尝试过arm-2009q3, 后来索性重新装了ubuntu 160...

2018-09-21 14:22:09 6993 1

转载 Linux下连接脚本lds的一点总结(转载部分)

   近期在翻看嵌入式应用开发完全手册中MMU一章中,有一段Makefile代码中使用了lds文件,其Makefile和lds脚本代码分别如下:objs := head.o init.o leds.ommu_bin:$(objs) arm-linux-ld -Tmmu.lds -o mmu_elf $^ arm-linux-objcopy -O binary -S mmu_elf...

2018-09-05 11:35:19 896

转载 内嵌汇编的语法及最常用的arm汇编指令(转载)

1. 在c里内嵌汇编 __asm__ __volatile__( "汇编代码 \n" "汇编代码 \n" :"=r"(c变量名) //第一个冒号表示从汇编里输出到c语言的变量, =号表示在汇编里只能改变C变量的值,而不能取它的值. +号表示可以取变量值,也可改变变量的值. r表示在汇编里用一个寄存器代...

2018-09-05 09:17:56 3352

原创 服务器本地端口数据监听

#! /usr/bin/python3# -*- coding:utf-8 -*-#本代码是旨在接收分批接收数据from socket import *from time import ctimeimport reimport sysdef StringtoInt(String,Num): i = 0 List = [] Stri...

2018-06-04 11:09:33 5189

原创 Modbus ASCII模式下的LRC校验算法

在发送报文到平台后重新将数据组织LRC校验码,但是使用Modbus规约文档上给的代码总是与发送报文的校验码不符, 查资料可知LRC校验码的算法有两种,实现起来也很简单.但是却不对.因为这些都是一个字节的, 但是发送报文中其实是两个字节的校验码,其高位在后,低位在前!  这与前面几段数据不同,需要注意下.没办法, 网上的资料虽多,但是能用的也寥寥. 不过有两份资料还是说明出问题的要害, LRC校验C...

2018-05-04 17:52:57 8598 1

原创 Modbus ascii模式 规约转换小结

  想要实现规约转换必须先得理解modbus rtu/ascii/tcp 规约. 我吃了这个亏,一开始就专注于小组的代码, 导致看了半天云里雾里, 随开始找资料, modbus规约那份pdf可以看看, 理解三点:(1) 上下行报文的概念 (2) 正常报文和异常报文 (3) RTU/ASCII报文帧之间的差别. 前面一点那份文档一点没提, 对我这种刚入行的人来说看起来不知所云. 关于理解ASCII模...

2018-04-27 17:13:46 1583 1

原创 modbus ascii报文转换

  在现有项目中增加modbus ascii报文的支持,因为项目中已经有了RTU和TCP报文的支持,所以想讲ascii报文转换成类似rtu的报文格式,利用RTU的函数处理,节省代码量.   根据RTU报文和ASCII报文的特点, 从该博文可以看出https://blog.youkuaiyun.com/windytop/article/details/45717655?locationNum=2 ,所以我是用一...

2018-04-24 10:58:46 4962 2

原创 Qt的mysql驱动失效的解决

写完上位机程序之后运行一直出错:QSqlDatabase: QMYSQL driver not loadedQSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7百度后发现这种情况也有不少人发生过,有文章说需要重新编译一下Qt的mysql驱动,并按照之,在编译过程中出错,

2017-11-21 15:10:35 423

转载 Linux下tty/pty/pts/ptmx详解

linux pty tty

2017-02-23 10:37:38 619

qdjango-db简单包装

qdjango-db简单包装

2025-01-19

STM32F103C8T6例程

C8T6开发过程中的一些小例程 基本例程-按键(查询方式) 基本例程-USART收发 基本例程-I0操作_LED流水灯 。。。

2018-09-08

空空如也

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

TA关注的人

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