自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QWidgetAction的用法

原文链接:qwidgetaction的用法 - 百度文库

2024-05-20 11:01:43 93

转载 Qt中:Q_DECLARE开头的 宏的用法

Qt通过Q_DECLARE开头的几个宏及几个qRegister开头的函数向Qt元系统注册一些非基本类型。一旦注册后,在Qt元系统中就可以很方便的利用这些非基本类型,这样对编程中的数据交互很方便。非基本类型是指除了一些基本类型之外的类型,如:除了int、float、qint......之外的类型,如:自定义类、结构体、枚举等。qRegister开头的函数用法参见如下:Qt中以qRegister开头的几个函数的用法说明。

2024-05-15 13:56:30 2

原创 QVariant

QVariant 可以保存很多Qt的数据类型,包括QBrush、QColor、QCursor、QDateTime、QFont、QKeySequence、 QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,并且还有C++基本类型,如 int、float等。当您需要存储不同类型的数据时,可以使用QVariant。QVariant是Qt中一个强大的变体类,提供了一种通用的方式来存储Qt对象及其他类的值,可以以类似于指针的方式存储任意类型的值。

2024-05-15 13:44:08 889

原创 Qt Tab键切换焦点顺序:setTabOrder()

原文链接:https://blog.csdn.net/wzz953200463/article/details/124110142。焦点先在ui->lineEdit上,当按下Tab键时,焦点跑到ui->lineEdit_2上。按照设定顺序依次向后!

2024-05-11 13:23:13 226

转载 DOM方式解析XML步骤:QDomNode,QDomDocument,QDomElement,QDomAttr使用分析

2、使用QFile打开要读取得xml文档,使用QDomDocument类的setContent()函数来设置整个文档的内容,它会将XML解析成一个DOM树,并保存在内存中。使用documentElement()可以获得他的根节点,这是访问XML文档的入口,返回一个QDomElement的脆响,这也是QDomNode的子类。3、获取根节点元素,QDomDocument类也是QDomNode的子类,使用firstChild()函数可以获得它的第一个子节点。//获得doc的第一个节点,即XML说明。

2024-05-11 10:13:47 17

原创 DOM方式解析XML中:QDomnodelist用法

然后我们使用count()方法得到子元素数量,再通过item()方法遍历每个子元素并打印其标签名和文本内容。QDomNodeList toList() const:将该节点列表转换为标准Qt容器类QList类型,并返回该容器。void append(const QDomNode& node):将给定的node添加到此节点列表的末尾。bool isEmpty() const:如果节点列表为空则返回true,否则返回false。int count() const:返回节点列表中的节点数量。

2024-05-10 11:14:11 188

原创 DOM方式:解析XML

DOM是Document Object。

2024-05-10 10:50:15 697

转载 QT解析xml的3种方式

注:readNext()每调用一次都将生成一个新记号,每次调用readNext()之后,都可以使用isStarElement(),isCharacters()及类似的函数来测试当前记号类型。原文链接:https://blog.csdn.net/ligare/article/details/122732776。原文链接:https://blog.csdn.net/ligare/article/details/122732776。//要解析的xml文件。属性节点的 nodeName 是属性的名称。

2024-05-10 10:10:02 22

原创 判断dll/lib是32/64位、查看lib是导入库/静态库的方法 、查看dll包含的符合、lib包含的函数

直接用记事本或者notepad++(或txt文本)打开exe文件(dll文件),会有很多乱码,不要头疼,接下来只需要在第二段中找到PE两个字母,在其后的不远出会出现d?开始-》所有程序-》Microsoft Visual studio 2010-》visual studio tools-》Visual studio 命令提示符。开始-》所有程序-》Microsoft Visual studio 2019-》点击“开发人员命令提示符”的选项。显示dll的:是导入库,显示.obj或者.o:是静态库;

2024-05-06 13:54:26 328

原创 静态lib文件,动态lib文件和dll文件的区别

关于lib文件的介绍-CSDN博客1.前言:出现.lib, .dll这种文件的原因:一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库;2. 用OpenCVbin文件夹里面放的都是dll文件;lib文件夹里面放的都是伴随dll文件的动态lib文件;staticlib文件夹里面放的才是真正的静态lib文件,和dll文件是独立的;

2024-05-06 11:25:02 544

原创 call 指令调用方式

这篇文章中,我们介绍了 call 指令的几种调用方式,举出具体代码示例说明其使用方式,并查看了相应机器码。然后通过反汇编或者直接查看机器码的方式,进一步验证了原理与实际指令布局的契合。原文链接:https://www.jianshu.com/p/55726f7e355a。

2024-04-30 16:15:49 396

原创 X86汇编指令大全

原文链接:https://blog.csdn.net/hbuxiaofei/article/details/131490591。原文链接:https://blog.csdn.net/hbuxiaofei/article/details/131490591。它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。七、处理机控制指令:标志处理指令。

2024-04-30 15:10:05 134

原创 机器码、指令、指令集、汇编语言、高级语言

在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbo1)或标号(Labe1)代替指令或操作数的地址。由于不同的硬件平台,执行同一个操作,对应的机器码可能不同,所以不同的硬件平台的同一种指令(比如mov),对应的机器码也可能不同。指令就是把机器码中特定的0和1序列,简化成对应的指令(一般为英文简写,如mov,inc等),可读性稍好。用它编写的程序一经输入计算机,CPU 直接读取运行,因此和其他语言编的程序相比,执行速度最快。不同的硬件平台,各自支持的指令,是有差别的。

2024-04-30 14:54:48 322

原创 x86汇编指令集中:指令分析、offset、标号

(其中 ModRM, SIB, displacement, immediate 可选。字节长的调用指令(机器码+操作数)e8 00 00 00 00。那么,指令编码中,0x11223344 是按小端序存放。是:0x11223344。假如 call 指令。

2024-04-30 14:51:14 70

原创 汇编指令和机器码对应关系

从400FF2跳转到405000,但是机器码是E9 09400000(4009)E9是操作码,操作数是4009,其实这样一个对应关系:4009+EIP(400FF2)+5=405000,数字5代表这个跳转操作占据5个字节;从4010FA跳转到40110E,同样,操作码是EB,操作数12,对应关系:12+EIP(4010FA)+2=40110E ,数字2代表跳转操作占据2个字节。操作码是E8,操作娄是00000003,对应关系:3+EIP(401000)+5=401008,5是占用5个字节。

2024-04-30 14:42:49 209

原创 反汇编:OllyDBG/objdump分析

反汇编中的第四列:是强大的od反汇编工具为我们提供的注释功能,能看到一些windows api,或是一些可读的信息。反汇编中的第三列:是我们研读的目标了,它是我们需要学习型的汇编语言;ALT+F9:执行到用户代码,可以快速地从系统领空返回到程序领空。CTR+F9:执行到返回,会在第一个遇到的RET指令暂停。F2:在光标处设置断点,再按一次删除光标处的断点。F8:单步步过,遇到CALL等函数会跳过,不进入。反汇编中的第二列:是所谓的汇编语言中的操作码;反汇编中的第一列:是指令在内存中存放的地址;

2024-04-29 15:04:51 197

原创 (3)C程序可执行文件的生成过程

如图,可见,如果jmp L0 和 sub C之间加入了新的指令,则只要重新确定sub C指令的地址,再填入L0即可。编译过程就是将预处理后得到的预处理文件(如hello.i)进行词法分析、语法分析、语义分析、优化后,生成汇编代码文件。经过预编译处理后,得到的是预处理文件(如,hello.i),它还是一个可读的文本文件,但不包含任何宏定义。汇编的结果是一个可重定位目标文件(如,hello.o)其中包含的是不可读的二进制代码。经过编译后,得到的汇编代码文件(如,hello.S)还是一个可读的文本文件。

2024-04-27 17:52:29 435

原创 程序链接步骤2:重定位

确定新节中所有的符号定义在虚拟地址空间中的地址。例如,为函数确定首地址,进而确定每条指令的地址,为变量确定首地址。在main.o和swap.o的重定位条目中有重定位信息,反映符号引用的位置、绑定的符号名、重定位类型。链接步骤2“重定位”: 将引用符号的地址“重定位”为相关联的符号定义的地址。需要用到 .rel.text 和 .rel.data节中保存的重定位信息。E中有main.o和swap.o两个模块,D中有所有定义的符号。修改.text节和.data节中对每个符号的引用(地址)① 首先进行符号解析。

2024-04-27 17:40:07 320

原创 程序链接步骤1:符号解析(符号 和 符号表)

2. 链接器的局部符号 不是指程序中的局部变量(分配在栈中的临时性变量),链接器不关心这种局部变量;2.2 什么是符号的定义,什么是符号的引用?符号的定义:就是程序中变量名、函数名的。符号的引用:就是程序中变量名、函数名的。(位于定义位置的 变量名、函数名);(不在定义位置的 变量名、函数名);,它包含了在m中定义和引用的符号,有。,不会在过程外被引用,因此。有哪些,各自有什么特点?符号:就是其实程序中的。2.4 符号表是什么?2.1 什么是符号?不在符号的类型中;

2024-04-27 11:20:54 388 1

原创 目标文件(.o/.obj) 分为几种形式?

但是这种可重定位的目标文件还不可以直接执行,原因是这些指令和数据中往往引用其他模块(目标文件)中的符号。这种操作成为“重定位”,因此这种目标文件成为“可重定位的目标文件”的后缀名通常是.o。所不同的是,这种文件已经经过了链接操作,和所有的模块(目标文件)都产生了联系。这时,每个目标文件中引用其他目标文件中的符号都已经得到了解析和重定位。3、共享目标文件:这是一种特殊类型的可定位目标文件,可以在需要它的程序运行或者加载时,动态地加载到内存中运行。目标文件分为可执行目标文件,可重定位目标文件和共享目标文件。

2024-04-26 21:37:45 326 1

转载 计算机是怎么认识代码并执行的?

计算机的执行过程是一个高度协调的、分阶段的操作。从二进制表示到逻辑门、ALU和控制单元的协同工作,计算机内部通过电子信号进行信息传递和操作。指令集架构定义了计算机可以执行的操作,编译器将高级代码转化为机器码,控制单元根据指令操控其他组件来实现你编写的功能。尽管这个过程对于计算机来说是机械性的,但正是这个过程使得计算机能够成为我们日常生活中不可或缺的工具。

2024-04-26 16:36:47 12

原创 (1)一个程序是 如何执行的?

然后程序执行一系列指令来加载可执行的 hello 文件,这些指令将 hello 目标文件中的代码和数据从磁盘复制到内存。一旦目标文件 hello 中的代码和数据被加载到内存,处理器就开始执行 hello 程序 的 main 程序中的机器语言指令。程序初始时等待我们输入一个命令,当在键盘上输入一个字符串“/hello”后,程序将字符逐一读入寄存器。将文本文件hello.s翻译成机器语言指令,变成二进制文件hello.o。与某些库链接,得到可执行文件,hello.o变成了hello,可以放到内存中执行。

2024-04-26 14:27:33 143

转载 变量的内存分配 及 储存位置

栈主要保存函数的局部变量和参数以及返回值。首先要知道,我们在应用程序中所使用的地址均是虚拟内存地址,在32位操作系统中,每一个进程所占用的虚拟内存是4G,4G的虚拟内存又分为1G的内核空间和3G的用户空间,内核空间是当前主机中所有进程共有的,用户空间是当前进程私有的,下面讲解的内存区域的划分,指的是用户空间的划分。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,所以静态区又分为两个段(data、bss后文详细解释)。

2024-04-26 13:54:22 29

转载 由于找不到**dll,无法继续执行代码,如何解决?

另一个视图显示所需文件的最小集合,以及每个文件的详细信息,包括文件的完整路径、基址、版本号、计算机类型、调试信息等。Dependency Walker可以检测许多常见的应用程序问题,例如缺少模块、模块无效、导入/导出不匹配、循环依赖性错误、模块的机器类型不匹配以及模块初始化失败。打开软件后,直接将要我们想要查看依赖关系的exe程序或者dll文件拖拽到窗口中灰色区域,拖拽后软件可能会卡顿一段时间,此时软件正在快速分析依赖关系,耐心等待即可,时间长短与依赖关系复杂程度相关。1、问题与 应用场景1。

2024-04-23 16:35:06 69

原创 (2)编译过程:一个.cpp文件到一个exe会经过哪些步骤

比如我们main函数所在的.obj文件上述了是需要使用taolaoda.obj文件中的函数,且在mian函数所在的.obj中声明了,链接器会去找其他.obj文件中找找到那个函数,然后将多个.obj文件中的东西复制到一个exe可执行文件中,我们需要使用其他文件中的函数和变量,这个就是链接器去找的,找到了虽有需要找到然后缝缝补补成一exe。看我们引用其他文件中的一个外部变量 a,但是我在其他文件中没有定义,然后链接的时候就找到了,然后就给了一个链接错误。

2024-04-23 16:17:28 696

转载 C++ 指针与作用域

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

2024-04-17 17:26:26 15

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

2024-04-17 15:32:16 95

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

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

2024-04-12 17:49:54 325

原创 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 242

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

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

2024-03-31 17:37:54 1052

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

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

2024-03-31 17:29:55 1113

原创 Qt 中 :deleteLater 总结

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

2024-03-31 12:07:21 600

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

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

2024-03-31 11:51:15 492

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

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

2024-03-30 20:41:20 369

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

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

2024-03-30 13:34:09 1323

原创 Qt常用容器之:QMap

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

2024-03-29 10:35:33 1093

原创 Qt常用容器之:QVector

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

2024-03-28 17:57:03 939

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

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

2024-03-28 17:50:02 336

原创 Qt常用容器之:QList

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

2024-03-28 17:35:50 1328

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

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

2024-03-28 17:12:00 259

空空如也

空空如也

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

TA关注的人

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