- 博客(77)
- 收藏
- 关注
原创 【QT】如何自定义QMessageBox的窗口大小,通过继承QDialog重新实现美观的弹窗
可以看出QMessageBox原有的弹窗看起来非常的不美观,有时候大有时候小,只能使用QMessageBox自带的图标,而且**不能自定义**窗口的**大小**,那是因为在源码中将其弹窗大小设置成了比较合适的大小,所以不能自定义改变弹窗大小。可以看出通过样式表的方法也不太美观,其中text没有居中。在对某一个组件设置了setObjectName()属性之后,我们可以通过objectName在外面获得这个组件。可以看出在布局时,其icon总是处在第0行第0列的位置,且其Aliment设置的是Top,所以
2023-06-30 15:12:44 8884 10
原创 【QT】枚举常用宏(Q_ENUM,Q_FLAG,Q_DECLARE_FLAGS,Q_DECLARE_OPERATORS_FOR_FLAGS)
1. 使用Q_ENUM之前,必须在类中先声明Q_OBJECT或Q_GADGET宏。2. Q_ENUM(枚举类型)必须放在枚举声明之后,放在前面编译器会报错。3. 用Q_ENUM声明的枚举,会自动注册到Qt元类型系统,可以使用静态函数QMetaEnum::fromType()来获取QMetaEnum。4. Qt 中,模板类 QFlags 提供了类型安*的方式保存 enum 的逻辑运算结果,来解决类型不安全的问题。
2023-06-25 17:02:02 3955
原创 【QT】如何检测目录或文件中的内容被修改,可以使用QFileSystemWatcher类进行检测
QFileSystemWatcher类提供了一个接口,用于监视文件和目录以进行修改。QFileSystemWatcher通过观察指定路径的列表来监视文件系统中文件和目录的更改。调用addPath()来监视特定的文件或目录。可以使用addPaths()函数添加多个路径。现有的路径可以通过使用removePath()和removePaths()函数删除。QFileSystemWatcher检查添加到它的每个路径。
2023-04-24 09:11:03 2501 2
原创 【QT】如何为自定义的Dialog添加确定取消按钮,可以使用QDialogButtonBox类
如果你想在MainWindo界面中得到Dialog中按下确定键时的一些业务,例如,在Mainwindow界面新建项目,弹出新建项目的dialog,然后将新建项目界面获得的信息显示到MainWindow界面中,此时,你就需要在Dialog中发送一个信号,即。来判断dialog按下的是哪个按钮,而不用connect再传递一个信号给外面,也就不用接收确定按钮的connect函数和槽函数。QDialogButtonBox在添加按钮时可以为按钮添加Role角色,这个非常重要,这样的话在外面调用时,直接使用。
2023-04-21 11:23:10 2822
原创 【QT】如何调整 comboBox下拉列表的间距或高度以及使下拉列表的字体居中
默认的QComboBox的下拉列表看起来非常的拥挤,且不美观。那怎样调整comboBox下拉列表的间距或高度呢?请看下面的方法:
2023-04-19 11:21:19 7448
原创 【QT】详细介绍Qt的窗口属性:Qt::WA_DeleteOnClose属性
如果widget接受了关闭事件,窗口将会隐藏(实际上调用hide())。默认情况下widget会接受关闭事件,我们可以重写QCloseEvent事件,可以选择接受或者不接受。即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。当我们创建一个窗口(MainWindow, Widget, Dialog, QMessageBox, 等等)后,我们一般会调用close()方法来关闭窗口。对比该应用程序所占用的资源大小。
2023-04-17 11:41:14 2345
原创 【QT】MainWindow中如何为菜单栏或工具栏中的Menu或Action设置快捷键
在为QMenu或Action设置text时,在text中的某个字母前加上&,在界面显示时你会发现:显示的text中没有&这个符号,只会显示text。这是因为在text中某个字母前加上&的作用是设置快捷键,当你按下Alt键时,其相应的text中&符号后面的字母会显示下划线,快捷键的使用方法是。第一种:先按住Alt,再按P,其显示的N会有下划线,再按N就会触发新建项目。在使用setShortcuts时,其action的后面会显示快捷键。按下Alt键时,其p下面会有下划线,表示是有快捷键的,快捷键为P。
2023-04-14 17:33:25 2659 1
原创 【QT】在公司为了统一代码的风格,那如何在Qt Creater中进行设置
试着想一下,一个程序员写一个程序,commit到团队的程序管理库里面,如果团队中的其他开发者需要这个功能,那么他就会去阅读这个源码,正所谓一千个读者,一千个哈姆雷特。就算是代码这样对于计算机来说非常严格的语言,而在我们人类看来绝对无法抛开我们固有的逻辑思维,而像计算机一样去思考,像程序编译器一样去理解这段程序,我们可以做到的就是阅读源码,梳理出自己的一套逻辑,然后理解这段程序的作用是干什么。设置好统一的代码风格之后,无论你自己写代码的习惯是怎样的,在你保存之后,其代码的格式都会统一,非常的方便。
2023-04-06 11:03:10 744
原创 【Git Bash】项目开发过程中需要知道 git stash 的用法
将stash保存的内容应用到当前目录,恢复之前缓存的工作目录,会将缓存堆栈中的对应stash删除(即在stash list中删除此stash),默认为第一个stash,即stash@{0};将stash保存的内容应用到当前目录,但不会把stash从存储列表中删除(在stash list中会一直存在),默认使用第一个保存,即stash@{0};显示哪些文件被修改;,num是git stash list中显示的数字,例如显示第二个stash中哪些文件做了改变: git stash show stash@{1}
2023-04-03 15:46:46 512 1
原创 【Git Bash】在公司你是如何向gitlab上提交代码和拉取代码的,请看这里→
Successfully rebased and updated xxx 表示:仓库的最近一次提交是别人提交的,但是没有冲突,直接push即可。这里强烈建议使用VS Code,它真的很方便,可以很清晰的标记有冲突的两个文件(pull下来的文件和你本地修改的文件)的不同,代码的不同。那么你再次打开你的QT项目,在代码里会有
2023-03-30 17:06:15 3786
原创 【QT】详细解释一下QDialog中exec与open的区别
使用exec进行显示,即按钮Btn3实现的窗口,可以看到:对话框是模态的,并且在对话框显示之后,其后面的代码并不会执行,即“333”并不会打印,也就是说exec显示的窗口会一直阻塞后面的代码不会执行,直到用户关闭它之后,才会执行后面的代码,此时”333“会打印出来。使用对象的方式实现一个对话框的显示,并使用open进行显示,即按钮Btn1实现的窗口,可以清晰的看到:对话框窗口是一闪而过的,但不影响open之后的代码的运行,其“111”还是会打印出来。中,在函数体中被构造,在函数结束的时候被析构。
2023-03-27 10:21:41 2484 2
原创 【QT】QByteArray、QString、char* 的相互转化(文本形式、二进制、十六进制)
在C语言中,系统都会默认在字符串末给我们加上\0用于结束字符串,所以在打印输出时候,只要你打印格式是%s,系统知道我们要输出字符串,而且系统也可以确定字符串的长度,所以当你用%s打印字符指针p的时候就会输出字符串,如果你是以地址打印格式输出的话,系统就会给我们打印出地址, 如果你是解指针(*p),那么系统就取p指针指向的内容,此时看你自己以什么格式输出,就用什么格式打印。新建一个记事本命名为1.txt,并在里面随便写入数据,使用ZIP进行压缩为1.zip,zip压缩文件是16进制的数据格式。
2023-03-20 09:16:22 8289
原创 【QT】JSON如何保存(序列化)QByteArray二进制或十六进制类型的数据
其QJsonValue存储数据的类型有:bool,double,int,QString等。对于网上的QByteArray直接转化为QString类型的方法,是对于文本字符串的。QString只有在数据是文本的时候才能使用,而不是二进制或十六进制的。
2023-03-17 15:59:14 2319
原创 最详细的FreeMASTER 3.2版本安装教程
FreeMASTER是一个界面友好的,可用于实时观察目标系统中变量内容的数据可视化软件。可以通过多种通信方式将PC机和微控制器电路板连接,如果不是明确需要使用"FreeMASTER Lite服务",而只是使用原有大家熟悉的使用FreeMASTER桌面版提供的功能,可以在安装过程中取消勾选FreeMASTER Lite的选项,不勾选是不需要激活码的,也可以正常使用FreeMASTER桌面版提供的功能。如果疏忽关闭了网页,跳过了激活码,没有激活码会直接回滚安装,FreeMASTER的基本功能也被卸载了。
2023-03-14 09:10:44 6338 2
原创 如何为Keil安装version 5版本的ARM Compiler(Use default compliler version 5)
当打开别人的工程时,一定要看别人的工程是拿什么版本写的,如果是version 5版本写的,你用version 6去编译,当你build的时候就会出现一些错误,所以别人是什么版本写的,你就用什么版本编译。最新发布的MDK5.37已经不再安装Arm Compiler 5(ARMCC)编译器了,需要手动安装。因为在点击project→options for target后,在Target选项卡中选择ARM Compiler编译器时,会看到missing:compiler version 5
2023-03-09 09:43:21 15206 1
原创 【QT】如何获取屏幕(桌面)的大小或分辨率
注意:如果是多屏幕,其每个屏幕的rect是不一样的,起始坐标不同,第一个屏幕的起始坐标是(0, 0),第二个屏幕的起始坐标是(1920, 0)QDesktopWidget 提供了详细的位置信息,其能够自动返回窗口在用户窗口的位置和应用程序窗口的位置。Qt 6.0 及之后版本,QDesktopWidget 已从QtWidgets 模块中被彻底移除。Qt5开始,QDesktopWidget官方不建议使用,改为QScreen。Qt5开始,QDesktopWidget官方不建议使用,改为QScreen。
2023-03-06 11:40:43 12575 1
原创 【C++】关于结构体内存对齐的问题
x86:指针是4字节,类A的大小是16,8与16的较小者是8。内存大小为:8 + 16 + 8 + 4 = 36,又因为36不是最大对齐数8的倍数,所以内存向后偏移,大小为 40。x64:指针是8字节,类A大小为24,8与24的较小者是8。内存大小为:8 + 24 + 8 +8 = 48,48刚好是最大对齐数8的倍数,所以内存大小为48。所以说,字节对齐的根本原因其实在于cpu读取内存的效率问题,对齐以后,cpu读取内存的效率会更快。这个字节,相当于读一个int,cpu从内存读取了两次。
2023-03-02 09:51:24 901
原创 【QT】如何快速查找和获取界面上的控件(findChild 和 findChidren)
(2)Qt::FindChildrenRecursively:查看对象的所有子对象(递归搜索)(默认值)。例如:返回parentWidget的一个名为"button1"的子QPushButton。(1)Qt::FindDirectChildrenOnly:只查看对象的直接子对象。例如:返回所有父parentWidget中所有的QpushButton。返回该对象的子对象,该子对象可以转换为类型T。T为模板,需要查找什么类型就写什么类型。返回一个该对象的所有子对象的列表。
2023-02-27 09:45:30 7337
原创 【QT】史上最全最详细的QSS样式表用法及用例说明
Qt样式表支持各种属性、伪状态和子控件,可以自定义小部件的外观。QSS示例,如何为全局添加QSS样式(全局加载QSS的方法)selector { attribute: value }selector:选择器,如 QWidget、QPushButton、QGroupBox等attribute:属性,如color、background-color、border、padding等value:值,与属性对应
2023-02-22 10:59:19 55433 10
原创 【QT】正则匹配 与 QRegExp
IPv4地址格式,总长度 32位=4段*8位,每段之间用.分割, 每段都是0-255之间的十进制数值。例如:正则匹配 D类IP:224.0.0.0~239.255.255.255。例如:为一个LineEdit限制输入只为数字。
2023-02-20 09:07:19 931
原创 【QT】UDP通信QUdpSocket(单播、广播、组播)
UDP是无连接、不可靠、面向数据报(datagram)的协议,可以应用于对可靠性要求不高的场合。与TCP通信不同,UDP通信无需预先建立持久的socket连接,UDP每次发送数据报都需要指定目标地址和端口。QUdpSocket以数据报传输数据,而不是以连续的数据流。发送数据报使用函数,数据报的长度一般少于512字节,每个数据报包含发送者和接收者的IP地址和端口等信息。UDP数据接收,首先要使用绑定一个端口,绑定端口后,socket的状态会变为已绑定状态“BoundState”。
2023-02-16 17:17:13 17069 2
原创 【QT】TCP通信(QTcpServer 和 QTcpSocket)
TCP是一种被大多数Internet网络协议(如HTTP)用于数据传输的低级网络协议,它是可靠的、面向流、面向连接的传输协议,特别适合于连续数据传输。TCP通信必须先建立TCP连接,分为服务器端和客户端。Qt提供QTcpServer类和QTcpSocket类用于建立TCP通信。服务器端必须使用QTcpServer用于端口监听,建立服务器;QTcpSocket用于建立连接后使用套接字进行通信。
2023-02-13 11:45:59 4899
原创 【C++】产生随机数 rand 和 srand 函数用法详解
在上述代码中,(MAX_VALUE - MIN_VALUE + 1)的值为 9,这是目标范围内整数的个数。余数运算符(%)返回的值是 0〜8 的数字,再用它加上 MIN_VALUE(也就是 10),即可获得 10〜18 的随机数。当使用通过 rand 函数返回的正整数除以6时,余数将是 0〜5 的数字。在 C++ 中,这是通过调用。在上述公式中,minValue 是范围内的最小值,而 maxValue 则是范围内的最大值。这意味着它们具有随机数的表现和属性,但实际上并不是随机的,它们实际上是用算法生成的。
2023-02-07 10:57:43 1784
原创 【QT】treeView列宽设置无效 或 设置标题文字无效
设置列宽之后再去按模型设置treeview会导致列宽设置失败。所有的set都必须在setModel之后,否则无效。正确演示如下,先设置模型,再去设置列宽。
2022-11-23 13:19:38 1439 1
原创 【QT】splitter实现界面部件的左右滑动
在.ui上添加一个treeView,一个Label和一个TableView。在构造函进行设置实现部件的左右滑动。
2022-11-22 09:26:53 1173
原创 【QT】QAbstractItemView的选择模式(SelectionMode)
QAbstractItemView的选择模式(SelectionMode)
2022-11-04 13:47:42 1177
原创 【C语言】sizeof(数组名),包括 一维数组、字符数组、二维数组
sizeof(a);sizeof(a+0);sizeof(*a);sizeof(a+1);sizeof(a[1]);sizeof(&a);sizeof(*&a);sizeof(&a+1);sizeof(&a[0]);sizeof(&a[0]+1)
2022-05-13 19:46:59 23153 1
原创 【C++】异常( try / catch / throw)
目录1.C语言传统的处理错误的方式2.C++异常概念3.异常的用法4. 自定义异常体系5.标准库异常体系6.异常的优缺点1.C语言传统的处理错误的方式传统的错误处理机制:终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误C 标准库中setjmp和longjmp组合。这个不是很常用,了解一下实际中C语言基本都是使用返回错误码的方式处理错误,部
2022-05-11 18:12:28 3955 1
原创 【C语言】printf函数参数压栈问题
现在我们假设参数的压栈顺序是从左到右的,这时,函数调用的时候,format最先进栈,之后是各个参数进栈,最后pc进栈,此时,由于format先进栈了,上面压着未知个数的参数,想要知道参数的个数,必须找到format,而要找到format,必须要知道参数的个数,这样就陷入了一个无法求解的死循环了。而如果把参数从右到左压栈,函数调用时,先把若干个参数都压入栈中,再压format,最后压pc,这样一来,栈顶指针加2便找到了format,通过format中的%占位符,取得后面参数的个数,从而正确取得所有参数。
2022-05-07 16:23:47 1382
原创 【C语言】C语言的基础知识以及基础试题(对基本知识点的掌握)
int a[10]:声明了一个有10个int类型元素的数组, 数组下标从0~9, 所以a是数组名, 代表数组的首地址, 也就是&a[0], sizeof(a)返回数组a在内存中所占的空间大小,以字节为单位, 也就是sizeof(a) = sizeof(int) * 10 = 4 * 10 = 40bytes。变量与指针的关系如图1所示;调用GetMemory( str )后, str并未产生变化,依然是NULL.只是改变的str的一个拷贝的内存的变化,getmemory中的malloc 不能返回。
2022-05-04 14:13:49 1727
原创 【C++11】lambda表达式、右值引用、final和override关键字
lvalue 是“loactor value”的缩写,可意为存储在内存中、有明确存储地址(可寻址)的数据,而 rvalue 译为 “read value”,指的是那些可以提供数据值的数据(不一定可以寻址,例如存储于寄存器中的数据)。当在父类中使用了虚函数的时候,会出现需要在某个子类中对这个虚函数进行重写的情况,当我们重写的时候,一不小心把函数名写错了,但是编译器并不会报错,因为它并不知道你的目的是重写虚函数,而是把它当成了新的函数。我们知道,右值往往是没有名称的,因此要使用它只能借助引用的方式。
2022-03-26 23:05:09 1452
原创 【C语言】string.h中str函数源码实现解析(strlen、strcpy、strncpy、strcat、strcmp、strstr、memcpy、memmove)
strlen函数原型:size_t strlen(const char *str);strlen返回str中字符的个数,其中str为一个以’\0’结尾的字符串(a null-terminated string)。strlen源码简单实现如果不管效率,最简单的实现只需要4行代码:size_t strlen_a(const char * str) { assert(str != NULL); //检查指针的有效性 size_t length = 0 ; while (*st
2022-03-10 16:02:44 3639
原创 【STL】关联式容器:set 与 map
① set容器中所有元素在插入时自动被排序。② set容器和multiset容器属于关联式容器,底层结构用红黑树实现。set容器不允许容器中有重复的元素。multiset容器允许容器中有重复的元素。//set容器排序 class Person {public :int m_Age;class comparePerson //仿函数本质是一个类 {public ://安装年龄 降序 return p1 . m_Age > p2 . m_Age;} };
2022-03-06 22:57:47 379
原创 【STL】容器适配器:stack 与 queue 详解
① stack是一种后进先出的容器,它只有一个出口。② 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为。③ 栈中进入数据称为:入栈 push④ 栈中弹出数据称为:出栈 pop① queue是一种先进先出的数据结构,它有两个出口。② 队列容器允许一段新增元素,从另一端移除元素。③ 队列中只有对头和队尾才可以被外界使用,因此队列不允许有遍历行为。④ 队列中进数据称为入队。⑤ 队列中出数据称为出队。
2022-03-05 10:22:04 324
原创 【STL】list容器(list常用操作函数、构造函数、赋值和交换、大小操作、插入和删除、数据存取、反转和排序)
① 功能:将数据进行链式存储。② 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。③ 链表的组成:链表由一系列结点组成。④ 结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。⑤ 添加元素,将原指向下一个元素的指针指向新元素即可,新元素指向下一个元素⑥ STL中的链表是一个双向循环链表。[双向]:每一个指针既指向下一个结点的元素,也指向上一个结点的元素。
2022-03-03 09:48:09 1184
原创 【STL】deque容器详解(deque常用的操作函数、构造函数、赋值操作、大小操作、插入和删除、数据存取)
(1)功能:双端数组,可以对头端进行插入删除操作,也可以对尾端进行插入和删除操作。vector对于头部的插入效率低,数据量越大,效率越低,例如头部后有十万个数据,则往头部插入一个数据时,十万个数据都需要往后挪一挪才能在头部插入数据。deque相对而言,对头部的插入删除速度会比vector快。vector访问元素时的速度会比deque快,这和两者内部实现有关。
2022-03-01 20:36:08 6549 2
原创 【STL】vector容器详解(vector常用的操作函数、构造函数、赋值操作、容量和大小、插入和删除、数据存取、互换容器、预留空间)
(1)vector容器和数组非常相似,也称为单端数组。(2)vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展。动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。(3)vector容器的迭代器是支持随机访问的迭代器。
2022-02-28 17:04:52 5517 2
原创 【STL】string详解(string类常用的操作函数、构造函数、赋值操作、子符串的拼接、查找和替换、比较、存取、插入和删除、获取)
(1)string是C++风格的字符串,而string本质上是一个类。(2)string 和 char* 区别:①char* 是一个指针② string 是一个类,类内部封装了 char*,管理这个字符串是一个char型容器。(3)string特点:①string类内部封装了很多成员方法, 例如,查找find,拷贝copy,删除delete,替换replace,插入insert。②string管理char* 所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。
2022-02-27 13:56:54 1171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人