自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 C++ 指针与作用域

4、返回原来讨论的问题,既然成员函数存放在公用函数代码段里面,而在源码1中,指针p 是保存了在花括号里面的对象a的地址的,对象a销毁了,我们不能使用变量a,但是它的地址是不会改变的,编译器只是销毁了对象a这个变量,并没有销毁对象a原来所在存储区域(当然是在栈里面的存储区域)中的成员变量和成员函数,所以,这里得到的指针p,还是指向花括号中定义的对象a的首地址,这就是ptr就是原来的对象a的this指针,当使用p->Func();而成员函数的存储方式,是从物理的角度而言的,二者是不矛盾的。

2024-04-17 17:26:26 3

原创 AB相编码器原理:A\B相从哪里来的

2024-04-17 15:32:16 49

原创 C++中不同变量(内置/类 类型) 的初始化规则

类类型变量是通过构造函数进行初始化的,不论类类型变量在哪里(全局或者局部)定义,该类类型变量的构造函数(默认构造函数或者指定的带参构造函数)总会被调用。至于系统是否帮我们隐式初始化变量,以及为变量赋予一个怎样的初始值,这要取决于该 变量的类型 以及我们在 何处定义的该变量。现在我们知道,构造函数的初始化是发生在初始化列表中的,那么,对于初始化列表中没有显示进行初始化的内置类型变量来说,其初始化规则就与上述内置类型变量的规则相同了。//构造函数中的初始化发生在构造函数的初始化列表中。//而非构造函数体中。

2024-04-12 17:49:54 294

原创 GetSystemTimes:获取CPU占用率(WIN API)

GetSystemTimes获得系统(自开机以来)处于Kernel状态下面的CPU时间,以及系统处于User状态下的时间,以及Idle的时间;原文链接:https://blog.csdn.net/qq_28742901/article/details/104960653。调用GetLastError函数可获得更多的错误信息。如果函数失败,返回值为false。如果函数成功,返回值为true。,就可以知道在一段时间内。

2024-03-31 21:03:59 195

原创 Qt主窗口 之:状态栏(QStatusBar)

在这个示例中,我们创建了三个永久部件(三个QLabel)和三个临时部件(三个QLineEdit),并将它们添加到状态栏中。参数text是要显示的消息文本,timeout是消息显示的超时时间,默认为0,表示消息将一直显示直到被清除或覆盖。参数index是插入位置的索引,widget是要插入的QWidget对象。返回状态栏中addWidget()和insertWidget()方法添加的QWidget对象的数量。启用或禁用状态栏控件的大小调整功能。公有槽函数,用于返回状态栏控件的大小调整功能是否启用的布尔值。

2024-03-31 17:37:54 879

原创 Qt主窗口 之:停靠/悬浮窗口(QDockWidget)

信号可以用于监测停靠窗口的浮动状态的变化。根据应用程序的需求,你可以使用这些函数来自定义停靠窗口的行为和外观。是 Qt 中的一个窗口部件,用于创建可停靠的窗口,通常用于构建多文档接口(MDI)或可定制的用户界面。函数来创建一个切换停靠窗口可见性的操作,以便用户可以通过工具栏切换窗口的显示状态。类提供了一系列函数,用于配置和管理停靠式窗口的行为和外观。允许用户将窗口停靠在应用程序的主窗口周围,或将其拖动到独立的浮动窗口中。允许用户将窗口部件停靠在主窗口的各个位置,如左侧、右侧、上方或下方。

2024-03-31 17:29:55 571

原创 Qt 中 :deleteLater 总结

deleteLater 依赖于事件循环,调用 deleteLater 后本质是发送了一个 DeferrerDelete 事件,在事件循环处理中把对象删除。②.代码示例。

2024-03-31 12:07:21 422

原创 Qt:常见的exec()函数

作用是开启一个循环,执行一个事件,相当于while(1)和for(;),相对于的种植事件的方法是quit(),exec()内部会执行一个任务队列,对所以已经排队的任务依次执行。类似于while(1)嵌套while(1),exec()同样可以嵌套,不同的是,部件的exec()继承了主界面的exec()很大一部分操作,所以界面不会因为内部嵌套exec()而卡死。使用示例:使用临时变量实现的dialog,不能保持模态属性,可以使用事件循环实现模态。那么,这些exec()的作用是什么呢?函数在Qt中是:用于。

2024-03-31 11:51:15 331

原创 QT:如何在程序密集响应时,界面不会卡住?

如果在处理一个特定事件上耗费的事件过多,那么用户界面将变得无法响应。例如,在应用程序把一个文件保存到磁盘的过程中,直到文件保存完毕,才会处理那些由窗口系统产生的事件;实际上,QApplication::processEvents()就是一个不停调用processEvent()函数的while循环。使用这个方法的时候存在一个潜在的问题:应用程序还在执行的时候,就关闭了主窗口或者点击了其他响应,会产生预料不到的后果。操作(或任意其他耗时的操作),这样的话,在保存文件的时候,应用程序的用户界面仍可以保持响应。

2024-03-30 20:41:20 347

原创 QT - 日志:qDebug/qInfo/qWarning/qCritical

在 Qt 中,信息输出机制用于在程序运行时输出各种信息,包括调试信息、提示信息、警告信息和错误信息等。qDebug:最常用的信息输出机制,用于输出各种调试信息,例如变量的值、函数的返回值和对象的状态等。可以通过在代码中添加 qDebug() 语句来输出信息。qInfo:用于输出提示信息,例如程序启动信息和操作成功信息等。可以通过在代码中添加 qInfo() 语句来输出信息。qWarning:用于输出警告信息,例如一些异常但不致命的错误信息。可以通过在代码中添加 qWarning() 语句来输出信息。

2024-03-30 13:34:09 1231

原创 Qt常用容器之:QMap

一、QMap概述QMap是Qt(跨平台应用程序开发平台)的一个关联容器,用于存储Key-Value键值对。它类似于STL的map,但有所不同。它是模板类,可以存储任意类型的数据,并且支持自定义排序规则。QMap的用法简单易懂且非常有用,它可以应用于许多领域,如图形界面、网络编程等。它可以存储任何类型的数据作为键和值,并且提供了快速查找、插入和删除操作。

2024-03-29 10:35:33 980

原创 Qt常用容器之:QVector

QVector 是 Qt 容器类库中的一个重要组成部分,它提供了类似于 C++ 标准库中的 std::vector 的功能,但同时拥有 Qt 独特的优势。我们的目标是帮助读者充分了解 QVector 的优势和局限性,从而在实际项目中做出明智的选择。在计算机编程的世界中,数据结构是一个核心概念,它为我们提供了有效地组织和存储数据的方法。QVector 是 Qt 框架中一个用于存储数据的容器类,它可以存储各种类型的数据,如整数、浮点数、自定义类等。以上是 QVector 的常用接口的详细介绍。

2024-03-28 17:57:03 876

原创 QT中的 容器(container)简介

这些容器类比STL(C++标准模板库)容器设计得更轻量、更安全并且更易于使用。如果对STL不熟悉,或者倾向于用“Qt的方式”,那么你可以使用这些类,而不去使用STL的类。(STL容器使用详见首页其他作品)Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项。比如,你需要一个大小可变的QString的数组,则使用QVector<QString>。

2024-03-28 17:50:02 323

原创 Qt常用容器之:QList

在开始讲解 QList 之前,我们先明确一下 Qt 数据容器能存储什么,不能存储什么。Qt 提供的数据容器都是模板类,构造时要带数据类型,比如下面这句定义整型数列表:Qt 数据容器有支持的数据类型,也有不支持的类型,不仅是 QList ,其他数据容器都有不支持的数据类型。存储在 Qt 数据容器里面的数据,必须是可赋值类型!比如 C++ 基本数据类型,int、double、指针等可以存储在 Qt 数据容器里;

2024-03-28 17:35:50 1017

原创 Model模型的:插入 和 删除

除所有偶数行,这将有可能使用beginRemoveRows和endRemoveRows达到150万次之多,1、要使模型能插入行/列和删除行/列,子类需要重新实现以下虚函数: insertRows();数),该函数会通知其他组件(比如视图或委托)行数将要发生变化,完成插入操作之后,还。2、下面以 insertRows()虚函数为例,讲解其规则(其余函数,原理类同)()函数(称其为 end 函数)以通知其他组件,该模型的行数已经更改,,比如若有一个有 300 百万行的模型,需要删。2.更新模型结构的内部数据。

2024-03-28 17:12:00 240

原创 Qt定时器类QTimer

2. 在大多数情况下,建议将定时器连接到QObject::startTimer()函数,并在哪里实现`timerEvent()`事件,这种方式能够避免多个计时器事件同时达到时可能引起的不稳定现象。要使用它,只需创建一个QTimer类对象,然后调用其 start() 函数开启定时器,此后QTimer对象就会周期性的发出 timeout() 信号。4. 如果QTimer的间隔设置过小,也可能会出现定时器的不稳定性,所以在应用程序需要精细定时的情况下,应小心使用QTimer。//每间隔一秒向控制台发送一条信息。

2024-03-28 16:04:07 405

原创 Qt智能指针--QScopedPointer

QScopedPointer和C++中的智能指针std::unique_ptr其概念是一样的,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确地删除。但它有更严格的所有权,并且不能转让,一旦获取了对象的管理权,你就无法再从它那里取回来。而使用T *QScopedPointer::take()也是返回对象指针,但QScopedPointer不再拥有对象所有权,而是转移到调用这个函数的caller,同时QScopePointer对象指针置为NULL。

2024-03-26 15:38:16 356

原创 QDialog的成员函数exec() 的返回值

如果希望在按钮按下后让QDialog::exec()返回QDialog::Accepted或QDialog::Rejected,可以使用QDialog::accept()和QDialog::reject()函数。在这个示例中,当用户点击“登录”按钮时,如果用户输入有效,则调用accept()函数,让QDialog::exec()返回QDialog::Accepted。否则,调用reject()函数,让QDialog::exec()返回QDialog::Rejected。// 处理用户点击了取消按钮的逻辑。

2024-03-21 10:01:10 298

原创 uart、串口、COM口、USB口,ttl,rs232,rs485这几个是什么关系?

受限于本文篇幅,还有更多关于串口、COM、UART、USART、RS232、RS485、RS422、TTL细节讲解的内容,私信作者或者关注公众号,回复230218,获取对应的资料。我们前面讲过,UART、USART、TTL、RS232、RS485、RS422有不同电平特性,那么,这些设备互联正常通信的首要条件是必须电平匹配,否则,轻则功能不正常,重则烧板子,烧芯片。受限于本文篇幅,还有更多关于串口、COM、UART、USART、RS232、RS485、RS422、TTL细节讲解的内容,请在文末获取...

2024-03-20 10:12:25 736

原创 VS2015不能 调试中编辑呢?

警告 LNK4075 忽略“/EDITANDCONTINUE”(由于“/SAFESEH”规范) TAppEncoderC:\chenglei\FME\HM-16.0-FME-lab\build\vc10\encmain.obj1。对于/RELEASE:这里就不用多说了吧,编辑并继续无法在release模式下使用。好了,现在重新生成项目,然后试试看,是不是可以使用“应用代码更改”了呢?b、忽略“/EDITANDCONTINUE”(由于“xxxx”规范)对于这两种警告,MSDN给出了解释(

2024-03-19 14:43:14 243

原创 QLibrary:加载动态库

项目中需要对操纵手柄进行读取,在网上找了几篇博客,基本都是依赖winmm.lib,但其中一篇直接加载它的动态库,从里面把函数解析出来,虽然麻烦,但还是眼前一亮,竟然可以这么做!一般只有对某个dll非常熟悉,知道dll中包含哪些函数、函数参数个数及类型、返回值类型才使用这种方式加载并调用函数,否则,还是使用头文件+lib的方式调用函数。由于不太熟悉typedef的这种操作,一开始没看懂,后来查了下,这是使用typedef定义的函数指针,并简单整理了这篇文章。,通过resolve进行解析,resolve。

2024-03-17 19:41:41 396

原创 C语言自定义数据类型:用typedef声明新类型名

除了可以直接使用 C 提供的标准类型名(如 int,char,float, double 和 long 等)和程序编写者自己声明的结构体、共用体、枚举类型外,还可以用 typedef 指定新的类型名来代替已有的类型名。并不是用 “ Num[10] ” 去代替 “ int ”,而是采用如同定义变量的方法那样先生成一个类型名(就是前面介绍过的将原来的变量名换成类型名),然后用它去定义变量。简单地说,就是按定义变量的方式,把变量名换上新类型名,并且在最前面加 typedef,就声明了新类型名代表原来的类型。

2024-03-17 17:35:34 525

原创 VS2019加QT5.14中Please assign a Qt installation in ‘Qt Project Settings‘.问题的解决

机器上装有Qt5.12.9和Qt5.12.2,以及Qt5.7,因为不同的工程使用的Qt不一样,所以工程中Qt版本没有匹配,我里工程使用Qt5.7。选择后会弹出如下窗体,选择编译机器版本msvc2015 64即可(如果是单纯的qt项目,可以直接选择出现的自己qt版本)如果上述修改后,问题仍然没有解决。那么先将Qt Versions的名称删掉,之后重新命名一个不同的名称!一般是直接将工程复制到另一台电脑上所导致,系统可能默认不选择使用的qt版本。右键工程——qt——convert project to。

2024-03-17 14:03:36 418

原创 Win7 VS2015+Qt5.9 编译出现MSB3758 MSB4036 NMAKE : fatal error等各种错误问题记录

解决方式:首先升级qt-vsaddin到支持VS2015的最后一个版本qt-vsaddin-msvc2015-2.4.3,然后升级.NET Framework到4.7及以上,这里用的是4.7.2,参考原文链接:https://blog.csdn.net/xinhuahappy/article/details/108645112。3.1 升级qt-vsaddin,下载qt-vsaddin-msvc2015-2.4.3。1、第一种错误(error MSB3758、error MSB4036)

2024-03-17 13:53:14 283

原创 QTread启动线程方式2-继承QObject,仍然需要 发射信号函数

11。

2024-03-15 17:55:24 102

原创 VS项目属性: Target Platform Version 和 Platform Tool Set

这个解释里只是提到这个属性指定了 “用于构建项目的 Windows SDK 的版本号”,还说什么如果指定了新的Windows版本的SDK,而程序运行在更早的Windows版本,程序运行时要检测一下当前运行的 Windows 版本,把旧版本 Windows 不支持的一些功能禁用掉。按字面上理解,就是肯定了这样的实践——如果我指定使用 Windows 10 的 SDK 10,运行在 Windows 7 系统上的话,要注意不去调用 Windows 10 支持而 Windows 7 不支持的接口。

2024-03-15 12:55:17 650

原创 DeleteFile(szFilePath)失败,之后再对文件操作,造成崩溃

1.如果不再对szFilePath1文件进行操作 + DeleteFile()函数执行失败=》也不会造成 软体崩溃!2.如果后续需要对szFilePath1文件进行操作 + DeleteFile()函数执行失败=》就会。所以,如果后续需要使用,必须要对DeleteFile()函数 返回值,进行检查!

2024-03-14 17:59:50 200

原创 QThread常用相关函数、线程启动方式

但是,线程可能会立即被终止也可能不会,这取决于操作系统的调度策略,使用terminate()之后再使用QThread::wait(),以确保万无一失。线程的起点,在调用start()之后,新创建的线程就会调用这个函数,默认实现调用exec(),大多数需要重新实现这个函数,便于管理自己的线程。该函数返回后,线程便执行结束,就像应用程序离开main()函数一样。使用terminate()函数,线程可能在任何时刻被终止而无法进行一些淸理工作,因此该函数是很危险的,一般不建议使用,只有在绝对必要的时候使用。

2024-03-14 15:53:40 566

原创 QT中connect()的参数5:Qt::DirectConnection、Qt::QueuedConnection区别

Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。Qt::QueuedConnection:槽函数在控制回到接收者所在线程的事件循环时被调用,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。

2024-03-11 15:39:18 702

原创 QSettings

用户通常希望应用程序能够记住其跨会话的设置(窗口大小和位置、选项等)。此信息通常存储在 Windows 上的系统注册表中,以及 macOS 和 iOS 上的属性列表文件中。创建 QSettings 对象时,可传递公司或组织的名称以及应用程序的名称。QSettings 的 API 是基于 QVariant 的,可以让用户便捷地保存大多数基于值的类型,例如 QString、QRect 和 QImage。QSettings 是对这些技术的抽象,使用户能够以可移植的方式保存和恢复应用程序设置。

2024-03-11 14:51:48 341

原创 QT: 获取CPU序列号、硬盘序列号、主板序列号 (采用wmic命令)

很强大,在win10上系统上wmic命令被powershell的“ help Get-WmiObject ”代替,但是wmic 命令还是正常可以使用的。创建新进程: wmic process call create "C:\Program Files\Tencent\QQ\QQ.exe"通过wmic 命令获取CPU序列号、硬盘序列号、主板序列号、CPU名称等信息。查询cpu序列号: wmic cpu get processorid。查看cpu详细信息: wmic cpu list brief。

2024-03-11 14:21:55 763

原创 工厂 模式

工厂模式分为三种(简单工厂模式,工厂方法模式,抽象工厂模式)参考原文链接:https://blog.csdn.net/flyingcloud6/article/details/131352604一、为什么要使用工厂模式?主要是对对象的创建进行了一个封装;因此也属于创建型模式。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决接口选择的问题。一个调用者想创建一个对象,只要知道其名称就可以了;

2024-03-07 16:32:32 989

原创 嵌入式系统是什么?Linux应用开发是开发什么的?

嵌入式系统嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。嵌入式系统与通用计算机系统的本质区别在于系统应用不同,嵌入式系统是将一个计算机系统嵌入到对象系统中。这个对象可能是庞大的机器,也可能是小巧的手持设备,用户并不关心这个计算机系统的存在。嵌入式系统一般包含嵌入式微处理器、外围硬件设备、嵌入式操作系统和应用程序4个部分。嵌入式领域已经有丰富的软硬件资源可以选择,涵盖了通信、网络、工业控制、消费电子。

2024-03-06 11:00:06 659

原创 嵌入式 Linux 开发的基本概念 及 学习路线

以往的学习路线通常是:裸机--->u-boot--->内核移植--->驱动开发--->根文件系统--->APP 开发。这样的学习路线一开始就耗费大量时间来学习各种复杂琐碎的细节知识,效率低下,所以应该跳过裸机和u-boot,直接从应用开发入门,自顶向下学习,先快速掌握嵌入式 Linux开发的大致方法和过程,等有需要了再深入学习。① 在 Windows 上阅读、研究、修改(使用 Source insight 会很方便),修改后上传到 Ubuntu(使用 Filezilla)(简单地说,工具链就是编译器)

2024-03-06 10:17:47 463

原创 linux嵌入式开发是什么

一些常见的Linux发行版如Buildroot、OpenWrt、Yocto Project等,它们针对嵌入式系统进行了优化,具有更小的存储空间和更快的启动时间。2. 设备驱动开发:嵌入式系统中的各种硬件设备(如传感器、显示屏、网络接口等)需要相应的设备驱动程序来进行控制和访问。6. 系统调试与优化:在开发和部署嵌入式系统时,系统调试和性能优化是必不可少的步骤。通过使用调试工具、性能分析工具和日志跟踪工具,开发者可以找出系统中存在的问题和瓶颈,并进行优化和改进。

2024-03-06 10:07:46 226

原创 并发编程中常见的设计模式,c++多线程如何设计

类 Unix 的操作系统中创建进程的 API 是 fork(),传统的 fork() 函数会创建父进程的一个完整副本,例如父进程的地址空间现在用到 了1G 的内存,那么 fork() 子进程的时候要复制父进程整个进程的地址空间(占有 1G 内存) 给子进程,这个过程是很耗时的。没有修改操作,也就是保持了不变性。如果在某一段业务高峰期的时间里生产者“生产”任务的速率很快,而消费者“消费”任务速率很慢,由于中间的任务队列的存在,也可以起到缓冲的作用,我们在使用MQ中间件的时候,经常说的削峰填谷也就是这个意思。

2024-03-01 10:05:38 1178

原创 多线程如何设计?一对多/多对一/多对多

二、14个多线程设计模式。

2024-02-29 16:32:54 794

原创 控制器和驱动器的区别是什么

而驱动器则是一种电气或者机械器件,它的主要作用是控制电机、活动部件等运动控制,使得机器按照特定的轨迹和速度工作。在实际生产和工程应用中,控制器和驱动器通常是一体化的系统,相互协调配合,以实现对机器的精确控制和驱动。控制器通过芯片或者单片机实现对机器的控制和监测,根据输入的数据和指令,对输出控制信号进行判断和调整,实现对机器的各种运动控制。而驱动器主要是通过电子电路和机械传动系统实现对电机等动力机构的驱动控制,在机器运行过程中,根据控制器输出的信号,对终端执行部件(电机、执行器、阀门等)进行驱动和控制。

2024-02-29 15:08:55 385

原创 左移/右移:都是指 二进制 移位

需要先将 目标数值,转换为“二进制”后,再进行移位操作!移位之后,再转换回之前的的进制数!

2024-02-29 10:12:13 127

原创 2-3 树

2-3 树作为一种平衡查找树,查询效率比普通的二叉排序树要稳定许多。但是2-3树需要维护两种不同类型的结点,查找和插入操作的实现需要大量的代码,而且它们所产生的额外开销可能会使算法比标准的二叉查找树更慢。

2024-02-27 18:03:19 521

空空如也

空空如也

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

TA关注的人

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