- 博客(564)
- 资源 (23)
- 收藏
- 关注
原创 采用qt做一个命令行终端
优点:QTermWidget开源库里面的代码注释丰富,使用语法比较简单易懂,阅读起来比较轻松。而qtcreator的这个功能代码少三分之一左右。如果单独做demo,软件,还是建议用QTermWidget开源库吧,毕竟用的人多。
2024-09-11 23:16:56 528
原创 Qt开发pdf阅读器作品源码
当前本软件BC阅读器V1.0.0已经实现了PDF文档阅读以及批注的常用功能,大约1万行代码,小巧精悍,麻雀虽小,五章俱全,具有非常好的可扩展性,快速学习和二次开发,最好的模板之一了。包括目录、缩略图、文本搜索、批注、背景色设置、页面缩放、文本选择/复制、截图......等功能。
2024-07-25 23:54:13 890
原创 qt实现打开pdf(阅读器)功能用什么库比较合适
总的来说,在qt上,应该还是高版本后(5.14以后吧),qt库自带的 qtpdf库用起来最简单好用,也能兼顾各种性能以及qt编码风格使用习惯什么的了 ,毕竟qt官方亲自封装的这个库,qt开发的话应该用起来是首选的吧。关于这个问题,网上搜一下,可以看到非常多的相关博客和例子,可以先看看这个总结性的博客(该博客讲得比较清楚了,这里我再补充一下吧(qt官方也给出了一些答案。
2024-06-28 01:09:07 1161
原创 C语言的词法分析器源码实现(Qt / c++编写)
网上找了好些博客,但是实现的都不全,或者压根不太对,代码书写也不太规范,所以自己参考这些博客以及C语言词法规则,用qt重新写了这么一个词法分析器。包括 lexc_language.h 和 lexc_language.cpp 两个文件,总计约600行代码。话不多说,先看效果,然后直接上源码,自我认为本人写的比较清晰,方便阅读和复用的。其实就是一个状态机进行识别,这个网上可以找到很多资料,不赘述了。
2024-05-19 01:47:03 599 1
原创 tftp协议(客户端和服务端)c语言实现
网上搜索该资料,有很多相关博客,但是很多都是复制来的,代码不全,无法运行。这里给大家推荐这个我找到的开源代码,简单又完整(其它一些开源博客,要么代码量太大太复杂,要么拆成很多个c文件,不便于理解)。
2024-04-30 01:44:13 503
原创 QToolTip设置背景色没有生效原因与解决方法
Fusion:按钮立体状的主题,Windows:XP系统风格。还是默认的WindowsVista好看。最后,在线html编辑器,我觉得这个挺好用,
2024-04-07 03:04:35 595
原创 qt各种锁使用讲解
在使用锁时,一定要小心避免死锁和竞态条件等问题,确保线程间安全的共享资源访问。QReadLocker和QWriteLocker:是QReadWriteLock的RAII类,用于简化对QReadWriteLock的加读锁和加写锁过程。在创建QReadLocker或QWriteLocker对象时,会自动加读锁或加写锁,离开作用域时会自动解锁,确保资源在合适的时候被解锁。在创建QMutexLocker对象时,会自动加锁,离开作用域时会自动解锁,确保资源在合适的时候被解锁,避免忘记解锁或异常导致未解锁的情况。
2024-04-04 13:14:10 898
原创 qtreeview控件水平滚动条自动出现方法与避坑
这是在heap内存监视模式下,调试出来的教训,一定要注意这个问题(如果直接调试模式,程序可能不会崩,但是监视内存,也能看出来item所在内存被全部刷为0Xddddddd...了,而heap内存监视模式下是全部刷为0x0000...的,所以程序一运行到那儿就会自动断住了,才能发现问题)。,expandAll函数的时候,就不让那个槽函数执行,而是最后调一下 ui->treeView->resizeColumnToContents(0);比较好的做法是,自己。
2024-04-01 06:07:41 697
原创 qtcreator msvc编译器 链接外部库的方式
编译器:msvc2022?(我是安装vs2022时候默认给我安装的这个编译器,所以我猜是msvc2022版本吧!#解决msvc编译器强制utf进行编译,因为默认是gbk进行编译的,从而中文会乱码或者编译报错。关于release版构建,类似的方式进行,自己测试一下吧~qt库:qt5.15.2-msvc2019。,然后点击构建运行,即可成功运行~集成开发环境:qtcreator。
2024-03-31 22:05:37 368
原创 HEAP: Free Heap block 0000028A24DF5A10 modified at 0000028A24DF5A50 after it was freed 正确解决方法
new了一块内存给p,使用后,delete p了,然后又给p指向的内存赋值等操作,这本身就是非法的(说明代码逻辑是有问题的),但是运行和调试阶段并不会报错,直到下次又需要new一块内存,而该内存刚好是上次我们非法使用的内存区,此时就报上面的错误了。可以看出,报错的位置,其实距离我们非法使用的语句,可能相差十万八千里了,因此非常难以定位。网上有很多博客,暴力分析自己的代码,从而找到问题语句所在,但是一个上万行的代码,可能就找非常难找到了,这里就要用的有效的调试工具了。
2024-03-31 01:08:34 784
原创 qtcreator配置msvc编译器 visual studio配置qt开发 以及使用对比
而visual studio是针对所有windows平台上应用做开发的一个强大IDE,功能繁多,而qt的开发仅仅是一个插件的形式进行支持,导致针对性功能较少,而无关功能大量存在,使得操作繁琐。我们可以发现,msvc编译器的编译和调试的速度特别快,特别是调试,显著的比mingw版qt和mingw编译器快的,调试功能更强大一些,其它的倒是没有什么区别。msvc是微软自家的编译器,编译速度,优化,调试方面,更加强大,此外很多第三方库都是windows平台,都是msvc编译器编出来的,因此可以直接链接使用。
2024-03-30 23:24:42 2944 1
原创 QTabWidget的tabbar不同方向显示 文字方向设置 图标跟随变化 实现方式 qt控件绘制原理
从图中可知,,但是很明显,在垂直方向tab时候,字体也跟着垂直了,不太利于阅读,而第3个tab,则是将了,第5个图,更是直接将了,都是做了改进。但是仍然存在个问题,例如tab3,图标却仍然是反着的,不太好看,所以,效果图如下:我们需要来研究一下QTabBar绘制的原理,然后编写相关代码进行实现。
2024-03-24 18:05:15 3320 1
原创 qt : ld.exe: cannot open output file xx.exe Permission denied解决方法
,导致该xx.exe一直在后台运行,使得该xx.exe文件无法被删除(我们找到该debug目录下该文件,又肯仍然删除不了,或者重新构建运行有时候qtcreator自己能删除它,但是也不一定),因此新构建程序的ld即链接器无法生成新的xx.exe,从而报错没有权限。因此只需要去系统任务管理器找到该xx.exe并结束该进程即可。奇葩的是,任务管理器有时候找不到该进程,这是为什么呢?我也不清楚,大家可以参考一下下面这几个博客:但是我感觉都没有解决问题。这是因为上一个 xx.exe未正常关闭(例如。
2024-03-22 13:58:46 976
原创 win11系统qtcreator构建运行程序首次启动卡顿(win11首次启动应用程序卡顿)
打开任务管理器,可以看到后台其实是 Antimalware Service Executable 该进程在实时运行导致的应用首次启动(qtcreator构建运行程序其实就是相当于创造出了一个新的应用程序)卡顿,而Antimalware Service Executable进程作用是属于win11系统Windows安全中心(Windows Defender)的实时扫描工具,用来对系统中开机首次运行(或者新出现的)的软件进行内容扫描的,也就是杀毒,这是比较消耗时间的,因此应用软件启动会卡顿,就是这个原因。
2024-03-15 00:09:23 759
原创 Adobe acrobat 11.0版本 pdf阅读器修改背景颜色方法
打开菜单栏,编辑,首选项,选择辅助工具项,页面中 勾选 替换文档颜色,页面背景自己选择一个颜色,然后确定,即可!
2023-11-04 16:05:44 927
原创 qt软件正常运行的崩溃了定位行号方法
软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。我们只需要在main函数中,SetUnhandledExceptionFilter(callback),软件崩掉时就会自动调用到callback函数中来,然后将相关信息(获取方法为开源类CCrashStack)写入到crash.log文件中,该函数中记录了当前寄存器状态,调用堆栈等信息。
2023-10-16 20:05:53 1247
原创 qt软件崩溃的分析方法-定位源文件和行号
软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。我们只需要在main函数中,SetUnhandledExceptionFilter(callback),软件崩掉时就会自动调用到callback函数中来,然后将相关信息(获取方法为开源类CCrashStack)写入到crash.log文件中,该函数中记录了当前寄存器状态,调用堆栈等信息。
2023-10-16 19:53:06 3203 1
原创 关于写英文论文的一些总结
名词连接名词组成名词,例如任务名,用task name,而不是name of task。其他各种词也是类似的;本文提出了什么什么,用 this study;多用it is become xx,这种更好,而不是we xx;缩略语方面,ax bx cx (ABC) is xx 这样用,而不是 ABC (ax bx cx) is xx;当然不同期刊啥的应该也有自己的风格吧
2023-08-29 10:18:40 229
原创 c++模板的原理与使用
使用的时候,总是需要我们带着Name这样指定传入的类名,因为这样才是一个实际的类,而Name,就跟前面这个类不是同一个类的。
2023-08-15 00:54:54 444
原创 qt自己实现方便的线程管理类
为了实现方便使用的线程管理类,类似于QtConcurrent::run()函数,就很好用,而且还能直接给相应的实参。但是该方式不能随时停止线程,满足不了我们的使用,但是其思想还是可以借鉴的。
2023-08-13 19:32:42 533
原创 qt多线程使用方式
得到线程池对象之后,调用 start() 方法**就可以将一个任务添加到线程池中,这个任务就可以被线程池内部的线程池处理掉了,使用线程池比自己创建线程的这种多种多线程方式更加简单和易于维护。我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样。,detach字符输出后,主函数退出,threadfun2还未执行完成,但是在主线程退出后,t2的线程也被已经被强退出。,因为频繁创建线程和销毁线程需要时间。
2023-08-13 19:17:49 333
原创 qt QPalette的原理与使用
此外,这个palette默认是子对象继承父对象的,即只要mainwindow设置了比如palette中背景色为黑色,文本颜色为白色,那么整个软件都是这种风格了,这也就是软件实现多个风格切换设置的原理。此外,qt提供了一些风格可以选择,fusion,windows,winxp,等等,可以直接用的。所以,想要实现qtabwidget的每个标签页显示不同的背景色,因为该控件乃至它的子控件QTabBar都没有提供修改标签页背景色的接口,所以需要我们在QTabBar的paintEvent函数里自己去画出来。
2023-08-12 20:13:03 812
原创 控件未显示状态下,设置尺寸无响应
这是因为这些设置尺寸的函数,必须要在QWidget::updateGeometry()和QWidget::update()或者控件处于可见状态下?没看qt源码,所以不是很确定,但是先让父widget->show()一下再设置这个子控件的尺寸就可以了。
2023-08-08 10:21:33 152
原创 qt富文本编辑基本知识(QTextBlockFormat、QTextListFormat)
每个文档始终包含一个根框架,并且始终包含至少一个文本块(可能为空文本块)文本块(QTextBlockFormat)框架(QTextFrameFormat)表格(QTextTableFormat)列表(QTextListFormat)文本块(QTextBlock)框架(QTextFrame)表格(QTextTable)列表(QTextList)
2023-08-03 08:51:29 700
原创 qt子进程和父进程读写数据通信
进程A(例如主程序)创建了一个QProcess B,这个B就称为A的子进程,而A称为B的父进程。这里,因为是采用 QProcess创建的子进程,所以,接下来讲解的是该通信方式。子进程接收到了父进程数据,两个信号会发射出来:两个功能函数:QProcess::write()发出信息。
2023-07-31 12:33:17 1185 4
原创 qt截图软件中画箭头代码原理
提示:QLineF QLineF::normalVector()函数作用,返回以相同起点的它的垂直线。截图工具中,需要画一个。
2023-07-29 20:51:11 360
原创 QsciScintilla从行列位置转为坐标值
/注意,case SCI_POINTXFROMPOSITION: 那儿用的是lParam参数,而没有用wParam。//而最外层函数有两种形式SendScintilla(unsigned int msg, long wParam)//也就是说最外层的函数必须要调用第二个才行,也就是wParam参数我们一定得调用时给个0。
2023-07-24 13:21:18 194 1
原创 c++关于抛出异常以及空指针异常的捕获
try语句里由用户自己抛出一个异常,然后catch语句自己捕获进行进一步操作,就是自导自演行为,所以这个我觉得没太大意义,因为可以通过返回值也能直接知道异常情况。而像空指针异常,除0这些硬件异常,这个方法是无法自动捕捉的,软件会直接崩溃。1. VC集成开发环境中,菜单中设置一下,可以,但是是依赖编译器等,SEH机制,MSVC,2. Linux中,通过系统提供的api也可以,
2023-07-16 15:02:21 916
原创 qt跨线程调用指定函数的几种方法
线程T1的run函数中,实例化出来了对象O1(里面有work()函数),T2(UI线程,也叫主线程)的run中实例化出来了O2(里面有string widgetModify(xx)函数);work()函数中想调用O2的str = widgetModify(xx)函数,这就是一个跨线程调用的例子,跨线程写widget,需要传入参数,而且还需要获得返回值。那就会报错了,因为跨线程操作UI界面,会造成和主线程同时修改同一个界面的风险,qt是不允许的。当前有两个线程,T1, T2;
2023-07-06 14:16:24 2328
原创 qt 将图片转为base64字符串html直接可用
注意:如果用QDataStream是无法实现编码为html也能识别的字符串的(对比一下一些在线转换网站即可知道不是相同的,比如前面的字符串就没有iVBORw0KGgo这些字符,我也不知道为什么。原理:把一连串的二进制数,拆为6个6个的二进制组,然后每个组头部补2个0,从而将数的范围限制在64以内,都是可视化字符了。),必须用QBuffer就可以了的。例如这个博客我测试就总是不行,但是它转出来的也可以用它自己函数转回去的。//QImage主要是为图像处理(提供了像素级别的操作)而设计的独立于硬件的类,
2023-07-05 11:56:57 940
原创 qcharts控件如何提升
项目的.pro文件中,加入QT+= chartsmainwindow.h加入 #include QT_CHARTS_USE_NAMESPACE,注意:不是在mainwindow.cpp加入该代码,不然下面的提升操作,编译后会提升找不到类。ui界面拖入一个widget,然后提升为QChartView。
2023-06-11 18:23:26 558
原创 关于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 794
原创 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 2583
原创 latex公式自动换行与不自动换行的实现
公式内每个符号都用一个$$符号给括起来,这样,latex就会认为它们都是不同的公式,当然公式之间就能自动换行了。但是缺点就是,左边的\left\{必须要和\right\}待在同一个行内公式环境里,没法划分,划分开就报错。公式内用{}括起来即可,这样就不会被latex自动换行了,这里因为括号没有加转义字符斜杠\,所以不会显示出来。,例如{}内的东西就不能自动换行了,如果是运算符,就能自动换行。可以参考下面这个博客讲的。例如在双栏中,行内公式太长,就会溢出,很难看。公式中的元素,默认,
2023-03-17 21:02:13 17869
原创 makefile遇到的一些问题总结
文件的链接有先后,一般来说,startup.S文件在链接时候放在最前面。不然即使编译命令都一样,但是就是运行不起来汇编文件.s和.S是由区别的,编译器会对.S进行预处理,然后才得到.s文件。所以如果.s里面写了预处理的一些内容,那么编译就会报错。所以把.s文件直接改成.S后缀文件,总是对的。windows的copy命令,只能copy当前文件夹内的文件,不支持指定子文件夹
2023-03-16 21:46:53 225
原创 QT打开外部程序并嵌入Qt子窗口的缺点
总之,这样做,是不好用的,所以要么就是以分离软件的形式启动,让它独立运行,或者直接嵌入源码一起编译了(在两个软件都是自己开发的情况了,因为需要源码)。
2023-03-01 01:55:09 2774 2
qt对象树析构详细顺序
2024-09-05
arm cortex-a9程序在windows的qemu上跑
2022-08-17
stm32f407裸机程序在windows的qemu上跑
2022-08-17
windows用gcc编译stm32f103程序命令行控制stlink下载到板子
2022-07-22
qscintilla编译好的直接用.zip
2021-11-18
cc科学计算器c++(qt)实现.zip
2021-02-05
vs2013-ucosii-project.zip
2019-11-15
C++ 实现WebSocket 服务器 可运行.zip
2019-11-14
qt 3d游戏开发框架
2019-05-02
qt OpenGL 3d游戏开发框架
2019-05-02
FPGA nios驱动LCD12864实现uart以及菜单功能
2018-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人