![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IDE开发
文章平均质量分 72
我是标同学
我非常喜欢编程
展开
-
C语言的词法分析器源码实现(Qt / c++编写)
网上找了好些博客,但是实现的都不全,或者压根不太对,代码书写也不太规范,所以自己参考这些博客以及C语言词法规则,用qt重新写了这么一个词法分析器。包括 lexc_language.h 和 lexc_language.cpp 两个文件,总计约600行代码。话不多说,先看效果,然后直接上源码,自我认为本人写的比较清晰,方便阅读和复用的。其实就是一个状态机进行识别,这个网上可以找到很多资料,不赘述了。原创 2024-05-19 01:47:03 · 534 阅读 · 1 评论 -
makefile遇到的一些问题总结
文件的链接有先后,一般来说,startup.S文件在链接时候放在最前面。不然即使编译命令都一样,但是就是运行不起来汇编文件.s和.S是由区别的,编译器会对.S进行预处理,然后才得到.s文件。所以如果.s里面写了预处理的一些内容,那么编译就会报错。所以把.s文件直接改成.S后缀文件,总是对的。windows的copy命令,只能copy当前文件夹内的文件,不支持指定子文件夹原创 2023-03-16 21:46:53 · 202 阅读 · 0 评论 -
QT打开外部程序并嵌入Qt子窗口的缺点
总之,这样做,是不好用的,所以要么就是以分离软件的形式启动,让它独立运行,或者直接嵌入源码一起编译了(在两个软件都是自己开发的情况了,因为需要源码)。原创 2023-03-01 01:55:09 · 2530 阅读 · 2 评论 -
gdb openocd jlink arm-a9调试
这个命令非常重要,因为它才会告诉gdb将解析的.\xx.out的text段等内容载入到板子对应内存去,此时cpu才能读到且运行程序,否则直接运行会报 no bound即找不到边界。还有就是,该命令在gdb mi接口可能没有,但是mi接口可以直接用cli接口命令的,因此mi接口模式下也直接用这个命令即可。连接关系是这样的:gdb —> openocd —>(这里需要。) jlink —> arm-a9板子。原创 2023-02-25 19:48:34 · 1230 阅读 · 0 评论 -
qtcreator不能添加文件 Could not add following files to project
这是因为.pro文件的编码不是UTF8,导致qtcreator不能修改该文件,所以新文件加入不了。用notepad++把该文件修改为UTF8编码即可。原创 2023-02-02 18:57:58 · 1381 阅读 · 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 · 4632 阅读 · 0 评论 -
QsciScintilla编辑器从任意坐标拿到正确的行号
/核心就是这个函数,其实就是y坐标除以文本每行的高度,加上顶部行即可,也很简单的。然而,当鼠标位置为空行的位置,此时拿到的行号总是-1,这个是不符号我们期望的。如果我们追踪一下源码,可以发现Scitinall官方 Editor.cpp文件。说明这里的CLOSE表示是否。查看其源码发现,里面用的是。这个宏,其实需要换另一个宏。,或者用官方的话说是。原创 2022-12-15 10:44:12 · 548 阅读 · 0 评论 -
qsetting使用知识 qt程序名加空格 资源文件报错
QSetting 只需要 setValue 函数即可,会自动保存到ini文件内(虽然不是立刻保存进去),其实内部是通过syc()函数来保存进去的,就是一次性定时器到时间了触发这个函数保存一下。当然我们也可以直接调用这个函数,立刻保存进去。资源文件报错,一般是里面的某些文件无效了,比如被我们删除了啥的,这时候只需要去qtcreator里remove这些文件即可。qt程序名加空格,主要是在 TARGET = "xx xx” 这样的.pro文件中,加引号就可以了。原创 2022-12-08 18:38:14 · 419 阅读 · 0 评论 -
QsciScintilla自动代码完成实现原理
自动代码完成的源头有两个:本文档字符串(这个应该是词法分析器完成的),还有 QsciAPIs原创 2022-12-06 16:09:22 · 1291 阅读 · 2 评论 -
c/c++结构体如何判断相等而且是否能相互赋值
直接讲结论:结构体之间,是支持直接用等号=赋值的但是不支持直接用==判断是否相等的,编译会报错原创 2022-12-05 15:13:56 · 5470 阅读 · 1 评论 -
qt单线程实现顺序事件的处理不卡顿技巧(IDE开发)
我现在是这样的需求,我正在开发一款嵌入式IDE中,编辑器中光标改变,右侧的符号大纲能对应的改变选中项。这里的过程是这样的,鼠标位置改变事件函数里,通过光标行号,计算得到当前处于的符号(这是个耗时过程),然后在右侧的大纲里选中对应符号。用户可能会快速的改变光标位置,导致一连串的鼠标位置改变事件需要处理,从而光标位置改变就是卡顿的。1. 就串行处理,事件函数里判断光标所在行是不是和上次仍然相同,如果所在行相同,那么就不更新大纲位置了。这样来加快不必要的更新。2. 用一个定时器,当光标位置停下来了100ms后,再原创 2022-12-04 19:04:14 · 827 阅读 · 0 评论 -
QLineEdit的美化(支持内置按钮 自定义图标)
QLineEdit其实是支持动态显示删除按钮的,现代UI也都是采用这种方式的。通过函数filterLineEdit->setClearButtonEnabled(true);但是这个自带的按钮是黑白的,我们想改掉它的icon图片,那么就需要得到这个内置的删除按钮,而这个删除按钮不对外开放,我们需要通过 findChild 函数把这个控件找出来,对它进行setIcon操作,就可以了。此外,还可以给QLineEdit在前后增加action,用addAction函数就可以。示例代码如下:原创 2022-12-03 12:44:15 · 1699 阅读 · 2 评论 -
QListView显示出字符串不对齐
比如a,b,c这些字符的宽度是9个像素,但是 空格 " ” 的宽度可能只有8个像素。其它字符也存在这样的问题。用下面的代码就能看出像素多少了。这里,选择第二种了,利用多列的性质,就能让控件帮我们对齐了。这是因为 字体的 空格 和其它 可见字符 宽度是不同的。但是qtcreator控制台打印出来看,却是完全对齐的。2. 不用qlistview,用qtreeview。1,搞个委托类,就可以自己控制文本的绘制过程了。所以要特别注意这个坑。原创 2022-12-02 17:39:03 · 542 阅读 · 0 评论 -
QT软件开发中的图标设置与好用的图标网站
主要网站如下:(最起码支持png,svg格式的免费下载,而且搜索关键字会很友好,很全)就拿按钮来说,用代码设置图标,有而且只有xx.setIcon(QIcon icon)函数,其它action啥的的也是这个函数。否则,在代码中设置图片的话,我们还是用svg吧,因为能用函数动态生成各种尺寸的icon,且不会模糊。,这是因为设计师界面工具为我们的图片做了转换,最后还是生成了 ico 图片给代码中使用的。我们就直接用png图片即可。所以ico图片是最终的目标格式图片,而一般的图片编辑器是不支持保存为这个图片的。原创 2022-11-30 00:27:49 · 2482 阅读 · 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 · 1080 阅读 · 0 评论 -
windows系统make.exe进程的关闭以及子进程关闭问题和解决方法(任意进程都适用)
方法1简单直接,但是没有解决问题,只是绕过了问题。方法2耦合性太高。方法3稍微繁琐一些,且实操性不高。方法4不一定能成功,没试过。原创 2022-11-29 11:26:47 · 1520 阅读 · 0 评论 -
rm -rf命令的作用 以及windows 代替命令
rm就是remove的缩写,用于Linux系统中删除文件的命令。基本语法 rm [option] 要删除的文件或目录 常用选项 -r: 递归删除整个文件 -f: 强制删除不提示原创 2022-11-29 09:46:46 · 9918 阅读 · 0 评论 -
关于编辑器QScintilla(Scintilla)词法分析器取消非活动代码灰色显示
当然,如果我们还是想要编辑器QScintilla能准确的提示非活动代码,怎么办呢,我们可以找第三方工具(比如gcc的预处理器),分析出头文件中包含的所有宏,然后写入keyword 5,就能告诉QScintilla当前编辑器具备哪些已有的宏定义啦。看了源码,发现对于头文件,是不分析的,也就是头文件里面定义了宏啥的,本文档内是根本不知道的,所以这个宏追踪功能,其实就没啥用了,因为c语言工程,很喜欢把宏定义在头文件中,而且头文件还会嵌套的。入门,首先看我这两篇博客:关于QScintilla库的入门大全。原创 2022-11-17 14:58:42 · 507 阅读 · 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 · 13286 阅读 · 1 评论 -
QScintilla代码跳转时indicator工作不正确的问题
我现在要做按住 ctrl+鼠标左键点击释放 发生函数/变量的 定义/声明的 跳转功能。原理就是给标识符赋一个indicator,然后这个indicator释放会产生一个信号,我们关联这个信号,进行目标跳转处理即可。但是现在出现的问题,跳转本文件内,会发生一大段选中的情况,而且光标位置没有变动。原创 2022-11-14 15:22:19 · 423 阅读 · 4 评论 -
(转)编辑器_编辑器杂谈(转载)+点评
简介摘要: 编辑器杂谈(转载)+点评 编辑器杂谈(转载)+点评点评:Scintilla: 目前Scintilla有一统江湖的趋势。只要是新开发的软件工具能够用到高级编辑器的地方基本上就会用它了。的确Scintilla为一些开发提供了便利,但是,是不是也阻碍了编辑器发展的进程啊?没人愿意开发了,还会有进步编辑器[bian ji qi]杂谈(转载)+点评 编辑器[bian ji qi]杂谈(转载)+点评点评:Scintilla: 目前Scintilla有一统江湖的趋势。只要是新开发的软件[ruan转载 2022-11-13 21:25:20 · 596 阅读 · 0 评论 -
编辑器库QsciScintilla的indicator点击没有按键信息的bug解决
因此,我们看到,QsciScintilla的信号,其实就是更底层的 QsciScintillaBase的信号来的。所以,我们需要追踪 SCN_INDICATORRELEASE 这个信号又是怎么来的。其中state指明了,我们鼠标点击这个indicator释放鼠标的时候我们按下的ctrl、alt、shift键的状态。//或者关联qsciBasei这个封装层的信号。//一个是关联qsci这个封装层的信号。解决方法:(追踪qsci的源码)原创 2022-11-13 09:15:33 · 527 阅读 · 0 评论 -
qt源码解析1--事件循环原理(重写事件函数,事件过滤器等)
首先看我上篇博客准备好环境:现在进入主题。原创 2022-11-11 17:03:44 · 1823 阅读 · 0 评论 -
qt源码解析0--源码获取与调试环境准备
事件循环与处理过程,是一个gui库的核心。为了能更好的使用qt,写出更好更灵活的代码,我们需要搞明白qt中的事件循环原理。qt自从5.11之后的版本,就不提供安装包下载了,只能在线安装。5.11以及之前的版本的安装包下载:Index of /new_archive下面我以qt5.6.1为例。原创 2022-11-11 09:24:08 · 2538 阅读 · 0 评论 -
qt对于一个QWidget的所有事件
直接获取操作系统派发的所有事件:(虽然Qt事件对于系统的消息做了一些封装,但在实际过程中Qt封装的消息不满足我们,因此我们需要windos消息机制,在判断windows消息时,便要。qt封装的事件的接口:(所有qt封装的事件都会在这里能够获取到,进行if else判断即可)窗体内发生改变的事件:(窗口中比如字体改变,风格改变,布局方向改变等都会触发。输入法事件:(比如获取到正在输入的中文)手写板事件:(一般是平板电脑)nativeEvent事件。另一个方法:安装事件过滤器。原创 2022-11-10 10:37:44 · 1780 阅读 · 0 评论 -
一文读懂qt界面设计(分裂器,布局,拉伸,各种属性设置)
现在我们来正式开始讲解。qt中能称为布局的有如下6个:水平布局(QHBoxLayout)垂直布局(QVBoxLayout)表单布局(QFormLayout):其实就是只有两列的网格布局而已。网格布局(QGridLayout):类似一个表格,多行多列,能自动对齐,挺好用的。栈布局(QStackLayout):设计师界面无法直接产生出来,需要用代码创建出来分裂器布局(QSplitter,可以设置为水平的 或者 垂直的):分裂器是用于两个窗口的分割拖拽的,很有用的。原创 2022-11-04 15:36:12 · 13235 阅读 · 0 评论 -
qt子控件单独指定鼠标形状等样式
我现在是这样的需求,在一个编辑器里,贴一个搜索面板(所以它的父窗口就是这个编辑器)。编辑器的鼠标形状是文本编辑样式,而我这个搜索面板的鼠标悬浮样式默认也都变成这个文本编辑形状了,这个不符合我的要求。,比如鼠标悬浮时候的形状,背景色等。其实,我们选中这个主widget,设置光标为箭头就行了,因为根据默认继承特性嘛。自己还是想要设置为箭头形状,那么就再选择这里一次,保存,然后运行就可以了。原创 2022-11-02 21:18:14 · 448 阅读 · 0 评论 -
QScintilla的信号汇总和解释
根据类的继承关系,我们能直接使用的信号在 QsciScintillaBase 和 QsciScintilla(是对前面的这个基类的进一步封装而已) 这个类里。原创 2022-11-02 12:58:34 · 1190 阅读 · 0 评论 -
qt creator ui界面修改后运行不产生作用(本质分析)
我们用qtcreator可能好好的,但是偶然间,修改界面文件,运行后某些ui文件就不产生效果了。我是因为直接复制了别的ui文件,然后改名的,导致了这也的现象。直接把解决方法先说出来:删除Makefile文件即可。下面我们来从原理上本质性的分析这个问题。原创 2022-10-16 10:18:10 · 8266 阅读 · 1 评论 -
QScintilla的各种颜色字体等设置
那么上面的 setFont(QFont xx) ,setPaper(QColor xx) 这些函数就失效了,因为词法分析器会自己去控制每个词法单元的字体,颜色,背景色等属性。上述是未安装词法分析器的情况,此时所有的字符串都没用含义,都是当作一样的来对待,所以上述的函数会将整个编辑器里的内容都字体,背景色等都修改了。这个编辑器QsciScintilla类,自己有 字体、背景色设置函数,比如。那么显然,我们就要通过此法分析器这个途径去设置对应的颜色,才可以。原创 2022-10-14 16:45:54 · 2455 阅读 · 1 评论 -
qtreeview和qtreewidget的区别 使用总结 和选择
QStandardItemModel是qt提供了的,就是子类化的QAbstractItemModel。而我们使用的话,不再子类化QStandardItemModel,而是子类化QAbstractItemModel。子类化的话,需要重写里面很多虚函数,目的是告诉模型你如何提供这些函数的功能。举个例,重写rowCount(parent)函数,根据parent返回子行的数目,如果需求比较变态,我就是想根据不同的parent的特征返回不同的孩子数(不管实际孩子数是不是这么多),那么就要重写这个函数了。原创 2022-10-06 11:56:33 · 5775 阅读 · 1 评论 -
制作IDE时候调试时复合变量层级展开方式
variable object,且用 * 作为选项,不需要用 @ 作为选项,然后进行层级显示。stack章节是关于显示局部变量的,但是没法层级显示复合变量。只有variable object章节,创建这个变量对象才可以。做IDE,调用gdb都是用的mi接口命令。mi接口的官方网页可以看到:其实就。: 对调试时候的变量显示有关系。原创 2022-10-05 20:06:05 · 176 阅读 · 0 评论 -
qt creator点击控件 控件列表选中的方法
当我们设计复杂ui的时候,往往大量的控件,这时候我们想在右侧的控件列表显示当前在视图中选中的控件,qt creator是不能直接支持的,这个应该算是bug了。应该这样做:先在视图中选中这个控件,然后右侧的控件列表的滚动条我们。),可以发现,列表中就会选中提示了。原创 2022-10-05 19:41:53 · 523 阅读 · 0 评论 -
gdb入门教程大全(清晰明了)
gdb只是众多调试器中的一个,但是它是用得最多的,所以有必要了解一下。gdb和gcc一样,都属于gnu开源家族工具链,所以gdb对gcc编译后的程序的调试支持最好。学习一个工具,当然得先去看它官网,了解清楚整个脉络。我们这里关注如何使用,所以进入它的在线文档网站:(可能大家通过别的链接进入的网站跟这个不一样,那是因为这个gdb网站服务器里有多个版本的文档仓库,而官网这里进去的,总是最新的版本的文档)这个就是在线文档内容搬过来的,内容和结构基本一样,喜欢看pdf的可以看这个。原创 2022-10-03 21:20:21 · 8935 阅读 · 1 评论 -
关于qt模型视图 QStandardItemModel 的通俗讲解
我们只需要把兄弟关系,父子关系,这些关系对应映射到我们的视图中去,那么我们就可以一次性映射好这个关系,后面再也不用管视图了,只需要更新我们的模型数据,然后视图update()一下,就会自动更新视图了。由于数据之间的结构关系,其实就三种,列表,树,矩阵,所以qt提供的视图类也就3种,分别是listview,treeview,tableview。模型(就是指的数据组成形式,链表,多叉树,矩阵结构等)和视图(就是实际显示出来的控件)分离,相等于就是前端和后端分离的架构了,这个能够。原创 2022-09-30 13:08:17 · 2548 阅读 · 1 评论 -
QToolButton 使用(很好用)
QToolButton 是继承了 QPushButton(而QPushButton是继承自QAsractButton),所以它具有 QPushButton的所有属性,成员,和方法。原创 2022-09-30 10:42:03 · 6597 阅读 · 0 评论 -
qt指定窗体背景色以及各种颜色(生成调色方案)
指定窗体的各种颜色,默认是继承父窗体的各种颜色(加入该widget作为一个父widget而创建的),这里的palette修改一下,就可以了。每个颜色是干嘛的,里面的子控件会变成什么颜色,都能实时显示出来的,还是挺好用的。原创 2022-09-29 19:57:17 · 1419 阅读 · 1 评论 -
ctags命令行使用笔记
所有命令行选项使用的官方手册:原创 2022-09-22 10:25:51 · 579 阅读 · 0 评论 -
C/C++语言的服务器LS调研 (Language Server 实现代码索引 跳转定义 智能提示等功能)
先说一下LSP(Language Server Protocol),它是语言服务器协议,是一种被用于编辑器或集成开发环境 与 支持比如自动补全,定义跳转,查找所有引用等语言特性的语言服务器(LS,(Language Server)之间的一种协议。只要IDE和LS都遵循这个协议,那么各种各样得LS都能与IDE快速进行集成使用了。不然,两者不通,导致给IDE的插件生态非常不好了。LSP的官网:https://microsoft.github.io/language-server-protocol/ 这玩意是微软原创 2022-09-18 11:04:58 · 2703 阅读 · 0 评论 -
clang入门大全以及clang全家桶介绍
Clang 项目为LLVM 项目的类 C 语言家族(C、C++、Objective C/C++、OpenCL、CUDA 和 RenderScript)中的语言提供语言前端和工具基础设施,所有的一切,完全开源,而且具有丰富的文档,非常棒!!!提供了关于编译器方面的各种基础库(源代码api)和工具(编译好的可执行文件,称为全家桶),所以模块化非常好,用户可以组合它们,从而自己做出一些有意思的工具,或者定制化自己的编译器。Clang可以作为一个完整的编译器(clang.exe等),也可以提供api库。原创 2022-09-18 00:40:02 · 7826 阅读 · 0 评论