![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
qt
文章平均质量分 58
我是标同学
我非常喜欢编程
展开
-
关于QsciScintilla的快捷键设置原理
/如果自己要拆解一个按键,拿到修饰键:key & Qt::SHIFT),拿到普通键:key &= ~Qt::MODIFIER_MASK。//因此,自己组合出一个按键,那么就用 int qkey1 = Qt::CTRL | Qt::Key_J;//经过调试跟踪发现,设置的组合键,修饰键可以是ctrl,shift,alt的组合。//但是第二个键,只能是键值小于0x7f的,从qnamespace文件可知,//另外说一句,qt的按键原理,一个key为一个32位整数,修饰键占高8位。//下面两种方式都可以。原创 2023-06-09 12:34:36 · 760 阅读 · 0 评论 -
QKeySequence的使用
不是说ks1代表这两组快捷键(即分别都能触发),而是说按下 ctrl+q,再接着按下 ctrl+w,此时才能触发这个ks1,也就是。QKeySequence用于设置action的快捷键,一个QKeySequence代表一个快捷键,而不能代表多个快捷键。如果想分别拿出来里面的每个组合键,那么就用它的重载运算符[],例如ks1[0],ks1[1]等方式。如果出现 QKeySequence ks1("ctrl+q, ctrl+w");原创 2023-06-08 19:33:40 · 2237 阅读 · 0 评论 -
qt信号和槽避免多次连接
qt同一个信号和槽多次连接,则槽函数(默认),可能不是我们想要的结果。原创 2023-04-08 18:25:00 · 2333 阅读 · 1 评论 -
自定义软件帮助文档(qt assistant实现)
qt creator本身也是通过后台外部进程来调用qt assistant实现的技术文档浏览功能(可以指定一些配置参数,从而实现控制这个文档浏览软件的图标,菜单栏等,从而匹配自己的软件风格是一体的,此外设置这个进程的的父窗口为我们的软件窗口,就能实现融合一体。这里主要了解了一下qt assistant,这个是通过当作后台外部进程的方式来使用的, 如果我们想要看它的源码,也是可以的,),但是可能改动了其源码,使得界面控件显示都不一样了的,当然我们也可以按照上面说的源码进行改动来实现我们自己的文件浏览器。原创 2023-02-11 16:42:21 · 1208 阅读 · 1 评论 -
qtcreator不能添加文件 Could not add following files to project
这是因为.pro文件的编码不是UTF8,导致qtcreator不能修改该文件,所以新文件加入不了。用notepad++把该文件修改为UTF8编码即可。原创 2023-02-02 18:57:58 · 1327 阅读 · 0 评论 -
qt collect2: error: ld returned 1 exit status(能解决)
这个错误是链接器 ld.exe 报出来的,说明是链接错误而不是编译的语法错误,而链接过程其实就是把这些xx.o文件给链接起来,形成统一的地址空间。然而这些xx.o文件可能有些损坏了,或者同名,或者其它啥啥啥的奇怪问题,导致链接会出错。为了让这些xx.o能够重新生成一次,我们去手动删除它们,就可以强制编译器再次生成它们了。去编译生成目标文件(就是指那行xx.o)的文件夹中把所有的xx.o文件全部手动删除即可,然后重新编译项目,一般就能解决。如果还是解决不了问题,那就百度搜一下其它答案吧。原创 2022-12-16 10:20:35 · 4544 阅读 · 0 评论 -
QsciScintilla编辑器从任意坐标拿到正确的行号
/核心就是这个函数,其实就是y坐标除以文本每行的高度,加上顶部行即可,也很简单的。然而,当鼠标位置为空行的位置,此时拿到的行号总是-1,这个是不符号我们期望的。如果我们追踪一下源码,可以发现Scitinall官方 Editor.cpp文件。说明这里的CLOSE表示是否。查看其源码发现,里面用的是。这个宏,其实需要换另一个宏。,或者用官方的话说是。原创 2022-12-15 10:44:12 · 541 阅读 · 0 评论 -
关于qt的拖拽事件原理
/我们的EditorsTabWidget父控件要想拿到这个事件,那么就让editor别处理这个事件就行(因为处理完后调用ignore函数没用),所以下面的代码就是如果拖拽数据是超链接,那么就不处理了,这个事件就会自动传给父控件了。//然而,拖拽事件会被阻止往父控件传递,即使调用了ignore函数,也传不到父控件了,但是别的类型事件就不是这样(比如键盘事件),估计是拖拽事件的特性吧。//其实editor本身也是需要处理拖拽事件的,比如选中一段文本,拖拽实现剪切或者复制功能,就是通过拖拽事件来实现的。原创 2022-12-11 21:16:52 · 634 阅读 · 0 评论 -
qsetting使用知识 qt程序名加空格 资源文件报错
QSetting 只需要 setValue 函数即可,会自动保存到ini文件内(虽然不是立刻保存进去),其实内部是通过syc()函数来保存进去的,就是一次性定时器到时间了触发这个函数保存一下。当然我们也可以直接调用这个函数,立刻保存进去。资源文件报错,一般是里面的某些文件无效了,比如被我们删除了啥的,这时候只需要去qtcreator里remove这些文件即可。qt程序名加空格,主要是在 TARGET = "xx xx” 这样的.pro文件中,加引号就可以了。原创 2022-12-08 18:38:14 · 412 阅读 · 0 评论 -
QsciScintilla自动代码完成实现原理
自动代码完成的源头有两个:本文档字符串(这个应该是词法分析器完成的),还有 QsciAPIs原创 2022-12-06 16:09:22 · 1271 阅读 · 2 评论 -
c/c++结构体如何判断相等而且是否能相互赋值
直接讲结论:结构体之间,是支持直接用等号=赋值的但是不支持直接用==判断是否相等的,编译会报错原创 2022-12-05 15:13:56 · 5369 阅读 · 1 评论 -
qt单线程实现顺序事件的处理不卡顿技巧(IDE开发)
我现在是这样的需求,我正在开发一款嵌入式IDE中,编辑器中光标改变,右侧的符号大纲能对应的改变选中项。这里的过程是这样的,鼠标位置改变事件函数里,通过光标行号,计算得到当前处于的符号(这是个耗时过程),然后在右侧的大纲里选中对应符号。用户可能会快速的改变光标位置,导致一连串的鼠标位置改变事件需要处理,从而光标位置改变就是卡顿的。1. 就串行处理,事件函数里判断光标所在行是不是和上次仍然相同,如果所在行相同,那么就不更新大纲位置了。这样来加快不必要的更新。2. 用一个定时器,当光标位置停下来了100ms后,再原创 2022-12-04 19:04:14 · 820 阅读 · 0 评论 -
QLineEdit的美化(支持内置按钮 自定义图标)
QLineEdit其实是支持动态显示删除按钮的,现代UI也都是采用这种方式的。通过函数filterLineEdit->setClearButtonEnabled(true);但是这个自带的按钮是黑白的,我们想改掉它的icon图片,那么就需要得到这个内置的删除按钮,而这个删除按钮不对外开放,我们需要通过 findChild 函数把这个控件找出来,对它进行setIcon操作,就可以了。此外,还可以给QLineEdit在前后增加action,用addAction函数就可以。示例代码如下:原创 2022-12-03 12:44:15 · 1674 阅读 · 2 评论 -
QListView显示出字符串不对齐
比如a,b,c这些字符的宽度是9个像素,但是 空格 " ” 的宽度可能只有8个像素。其它字符也存在这样的问题。用下面的代码就能看出像素多少了。这里,选择第二种了,利用多列的性质,就能让控件帮我们对齐了。这是因为 字体的 空格 和其它 可见字符 宽度是不同的。但是qtcreator控制台打印出来看,却是完全对齐的。2. 不用qlistview,用qtreeview。1,搞个委托类,就可以自己控制文本的绘制过程了。所以要特别注意这个坑。原创 2022-12-02 17:39:03 · 537 阅读 · 0 评论 -
QT软件开发中的图标设置与好用的图标网站
主要网站如下:(最起码支持png,svg格式的免费下载,而且搜索关键字会很友好,很全)就拿按钮来说,用代码设置图标,有而且只有xx.setIcon(QIcon icon)函数,其它action啥的的也是这个函数。否则,在代码中设置图片的话,我们还是用svg吧,因为能用函数动态生成各种尺寸的icon,且不会模糊。,这是因为设计师界面工具为我们的图片做了转换,最后还是生成了 ico 图片给代码中使用的。我们就直接用png图片即可。所以ico图片是最终的目标格式图片,而一般的图片编辑器是不支持保存为这个图片的。原创 2022-11-30 00:27:49 · 2343 阅读 · 0 评论 -
qt启动cmd再启动一个exe
如果参数直接给了A.exe,是运行不了A.exe的,因为A.exe不是一个解释选项。而在Linux系统中,如果给ls作为参数,是不可以的,因为在Linux中这个ls是一个独立程序,而windows中的dir就是可以的,因为cmd.exe是解释这个来执行的,而不是dir是个程序。此时给的参数意义:\c xx xx 表示告诉cmd.exe此时不用等待键盘输入,直接以xx xx作为命令行参数了。目标过程:QProcess启动系统的cmd.exe,cmd.exe再去启动另一个 A.exe。方式启动cmd.exe,原创 2022-11-29 14:27:41 · 1068 阅读 · 0 评论 -
关于编辑器QScintilla(Scintilla)词法分析器取消非活动代码灰色显示
当然,如果我们还是想要编辑器QScintilla能准确的提示非活动代码,怎么办呢,我们可以找第三方工具(比如gcc的预处理器),分析出头文件中包含的所有宏,然后写入keyword 5,就能告诉QScintilla当前编辑器具备哪些已有的宏定义啦。看了源码,发现对于头文件,是不分析的,也就是头文件里面定义了宏啥的,本文档内是根本不知道的,所以这个宏追踪功能,其实就没啥用了,因为c语言工程,很喜欢把宏定义在头文件中,而且头文件还会嵌套的。入门,首先看我这两篇博客:关于QScintilla库的入门大全。原创 2022-11-17 14:58:42 · 499 阅读 · 0 评论 -
软件开发中的常用颜色对照表
常用颜色对照转载 2022-11-14 20:11:15 · 637 阅读 · 0 评论 -
Qt中定时器的所有使用方式
该函数的声明为:int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);参数一为时间间隔,单位毫秒;Qt::VeryCoarseTimer(很粗略的定时器,只保留完整的第二精度,大约为500毫秒);Qt::PreciseTimer(精确的定时器,尽量保持毫秒精度,试图保持精确度在1毫秒);Qt::CoarseTimer(粗略的定时器,尽量保持精度在所需的时间间隔5%范围内);该函数关闭一个定时器,参数为定时器的编号。原创 2022-11-14 16:45:13 · 13157 阅读 · 1 评论 -
QScintilla代码跳转时indicator工作不正确的问题
我现在要做按住 ctrl+鼠标左键点击释放 发生函数/变量的 定义/声明的 跳转功能。原理就是给标识符赋一个indicator,然后这个indicator释放会产生一个信号,我们关联这个信号,进行目标跳转处理即可。但是现在出现的问题,跳转本文件内,会发生一大段选中的情况,而且光标位置没有变动。原创 2022-11-14 15:22:19 · 416 阅读 · 4 评论 -
编辑器库QsciScintilla的indicator点击没有按键信息的bug解决
因此,我们看到,QsciScintilla的信号,其实就是更底层的 QsciScintillaBase的信号来的。所以,我们需要追踪 SCN_INDICATORRELEASE 这个信号又是怎么来的。其中state指明了,我们鼠标点击这个indicator释放鼠标的时候我们按下的ctrl、alt、shift键的状态。//或者关联qsciBasei这个封装层的信号。//一个是关联qsci这个封装层的信号。解决方法:(追踪qsci的源码)原创 2022-11-13 09:15:33 · 521 阅读 · 0 评论 -
qt源码解析1--事件循环原理(重写事件函数,事件过滤器等)
首先看我上篇博客准备好环境:现在进入主题。原创 2022-11-11 17:03:44 · 1792 阅读 · 0 评论 -
qt源码解析0--源码获取与调试环境准备
事件循环与处理过程,是一个gui库的核心。为了能更好的使用qt,写出更好更灵活的代码,我们需要搞明白qt中的事件循环原理。qt自从5.11之后的版本,就不提供安装包下载了,只能在线安装。5.11以及之前的版本的安装包下载:Index of /new_archive下面我以qt5.6.1为例。原创 2022-11-11 09:24:08 · 2531 阅读 · 0 评论 -
qt对于一个QWidget的所有事件
直接获取操作系统派发的所有事件:(虽然Qt事件对于系统的消息做了一些封装,但在实际过程中Qt封装的消息不满足我们,因此我们需要windos消息机制,在判断windows消息时,便要。qt封装的事件的接口:(所有qt封装的事件都会在这里能够获取到,进行if else判断即可)窗体内发生改变的事件:(窗口中比如字体改变,风格改变,布局方向改变等都会触发。输入法事件:(比如获取到正在输入的中文)手写板事件:(一般是平板电脑)nativeEvent事件。另一个方法:安装事件过滤器。原创 2022-11-10 10:37:44 · 1764 阅读 · 0 评论 -
一文读懂qt界面设计(分裂器,布局,拉伸,各种属性设置)
现在我们来正式开始讲解。qt中能称为布局的有如下6个:水平布局(QHBoxLayout)垂直布局(QVBoxLayout)表单布局(QFormLayout):其实就是只有两列的网格布局而已。网格布局(QGridLayout):类似一个表格,多行多列,能自动对齐,挺好用的。栈布局(QStackLayout):设计师界面无法直接产生出来,需要用代码创建出来分裂器布局(QSplitter,可以设置为水平的 或者 垂直的):分裂器是用于两个窗口的分割拖拽的,很有用的。原创 2022-11-04 15:36:12 · 12981 阅读 · 0 评论 -
qt子控件单独指定鼠标形状等样式
我现在是这样的需求,在一个编辑器里,贴一个搜索面板(所以它的父窗口就是这个编辑器)。编辑器的鼠标形状是文本编辑样式,而我这个搜索面板的鼠标悬浮样式默认也都变成这个文本编辑形状了,这个不符合我的要求。,比如鼠标悬浮时候的形状,背景色等。其实,我们选中这个主widget,设置光标为箭头就行了,因为根据默认继承特性嘛。自己还是想要设置为箭头形状,那么就再选择这里一次,保存,然后运行就可以了。原创 2022-11-02 21:18:14 · 443 阅读 · 0 评论 -
QScintilla的信号汇总和解释
根据类的继承关系,我们能直接使用的信号在 QsciScintillaBase 和 QsciScintilla(是对前面的这个基类的进一步封装而已) 这个类里。原创 2022-11-02 12:58:34 · 1173 阅读 · 0 评论 -
qt输出自定义的pdf文件源码详解
qt中有两种方式可以输出pdf:/是不会起作用的。要么就调用pdfWriter->newPage()函数,才会起作用。典型的例子就是设置页面大小setPageSize或者setPageSizeMM函数设置的页面大小不起作用。qt5的版本,qt提供了一个独立的pdf文件写入方式,那就是QPdfWriter,所以咱们当然用QPdfWriter啦。这种方式,在qt4成为唯一的方式。,否则后面再设置的话。原创 2022-10-28 19:57:27 · 2824 阅读 · 0 评论 -
Qt 中 deleteLater 使用总结
智能指针可以传入自定义的删除器,对于继承自 QObject 的类对象可以传入 deleteLater。moveToThread 的本质是把 QObject 对象的事件循环移动到子线程进行处理:qDebug()转载 2022-10-27 22:48:13 · 2653 阅读 · 0 评论 -
qt creator ui界面修改后运行不产生作用(本质分析)
我们用qtcreator可能好好的,但是偶然间,修改界面文件,运行后某些ui文件就不产生效果了。我是因为直接复制了别的ui文件,然后改名的,导致了这也的现象。直接把解决方法先说出来:删除Makefile文件即可。下面我们来从原理上本质性的分析这个问题。原创 2022-10-16 10:18:10 · 8140 阅读 · 1 评论 -
QScintilla的各种颜色字体等设置
那么上面的 setFont(QFont xx) ,setPaper(QColor xx) 这些函数就失效了,因为词法分析器会自己去控制每个词法单元的字体,颜色,背景色等属性。上述是未安装词法分析器的情况,此时所有的字符串都没用含义,都是当作一样的来对待,所以上述的函数会将整个编辑器里的内容都字体,背景色等都修改了。这个编辑器QsciScintilla类,自己有 字体、背景色设置函数,比如。那么显然,我们就要通过此法分析器这个途径去设置对应的颜色,才可以。原创 2022-10-14 16:45:54 · 2419 阅读 · 1 评论 -
c++回调函数的几种写法(注意成员函数)
主要有3种写法。1.普通函数(全局函数)作为回调函数这个就跟C语言里面的一样,没什么好说的2.类的普通成员函数作为回调函数注意点类的成员函数实际上是有一个隐含的void*形参的(由编译器给自动加上的),这个实际上就是所属类给它传递的this指针,不然该成员函数怎么不加前缀就能访问类中的其它成员的嘛。目标实现Add类向MainWindow类注册一个成员函数int addFun(),作为回调函数实际上这个函数全称是int addFun(void*)。所以注册函数定义时候,就需要把形参原创 2022-10-11 21:51:18 · 2660 阅读 · 0 评论 -
qtreeview和qtreewidget的区别 使用总结 和选择
QStandardItemModel是qt提供了的,就是子类化的QAbstractItemModel。而我们使用的话,不再子类化QStandardItemModel,而是子类化QAbstractItemModel。子类化的话,需要重写里面很多虚函数,目的是告诉模型你如何提供这些函数的功能。举个例,重写rowCount(parent)函数,根据parent返回子行的数目,如果需求比较变态,我就是想根据不同的parent的特征返回不同的孩子数(不管实际孩子数是不是这么多),那么就要重写这个函数了。原创 2022-10-06 11:56:33 · 5633 阅读 · 1 评论 -
关于qt模型视图 QStandardItemModel 的通俗讲解
我们只需要把兄弟关系,父子关系,这些关系对应映射到我们的视图中去,那么我们就可以一次性映射好这个关系,后面再也不用管视图了,只需要更新我们的模型数据,然后视图update()一下,就会自动更新视图了。由于数据之间的结构关系,其实就三种,列表,树,矩阵,所以qt提供的视图类也就3种,分别是listview,treeview,tableview。模型(就是指的数据组成形式,链表,多叉树,矩阵结构等)和视图(就是实际显示出来的控件)分离,相等于就是前端和后端分离的架构了,这个能够。原创 2022-09-30 13:08:17 · 2530 阅读 · 1 评论 -
QToolButton 使用(很好用)
QToolButton 是继承了 QPushButton(而QPushButton是继承自QAsractButton),所以它具有 QPushButton的所有属性,成员,和方法。原创 2022-09-30 10:42:03 · 6567 阅读 · 0 评论 -
qt指定窗体背景色以及各种颜色(生成调色方案)
指定窗体的各种颜色,默认是继承父窗体的各种颜色(加入该widget作为一个父widget而创建的),这里的palette修改一下,就可以了。每个颜色是干嘛的,里面的子控件会变成什么颜色,都能实时显示出来的,还是挺好用的。原创 2022-09-29 19:57:17 · 1412 阅读 · 1 评论 -
qt编程中的一些技巧
如果没有指定该对象的父对象,那么我们得自己在创建这个对象的地方,注意看它哪里不需要了,自己手动delete它,但是这个往往很难把握,因此会造成内存泄漏。比如mainwindow类中包含了很多对象,但是他们都设置了mainwindow作为他们的父对象,那么mainwindow的析构函数中,就不需要delete这些对象了,因为mainwindow被释放的时候,会自动delete掉这些子对象,这就是最大的好处。否则,逻辑搞复杂了,虽然结果都是能实现功能,但是没必要了,毕竟代码还是讲究好理解性。原创 2022-09-24 11:17:22 · 1226 阅读 · 0 评论 -
QString::arg().arg()和的使用arg(xx,xx)的区别
/ returns "Hellof %2",说明先替换第一个后,为(%1f %2).arg("Hello"),让,和再替换第二个,就变成了 "Hellof %2"了。// returns "%1f Hello",说明。所以区别:arg(xx,xx)会一次性替换,而且很符合自然想法。原创 2022-09-16 18:55:35 · 255 阅读 · 0 评论 -
Qt Creator启动非常慢的方法(已解决)
为什么也有博客说关闭welcome插件也行呢,因为欢迎界面里就是读取这个QtCreator.ini文件,使得恢复上次关闭软件的一些历史信息,所以关闭这个插件,当然就能跳过读取QtCreator.ini文件这一步啦,也能很快启动软件了。但是我觉得没有了欢迎界面,还是不太好看哈。如果直接删除QtCreator.ini这个文件呢,还是不行的,因为有些记录了历史项目的一些配置啥的,否则重新打开项目要求重新完整构建,也麻烦。,它两打开,会共同读取和写入系统的配置文件。,加载速度就会从慢了,解决办法:参考。原创 2022-09-15 20:45:47 · 3755 阅读 · 1 评论 -
qt实现自定义菜单
这个函数中快乐的操作啦。//注意:让对方发射信号后对方就没法执行它默认的菜单动作了,所以我们得完全在我们的槽函数中自己生成好菜单。原创 2022-09-12 10:06:21 · 824 阅读 · 0 评论