自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (QT-UI)十四、在时间轴上绘制一段段时间片

本系列预计实现①刻度上方文字显示,②时间轴拖动效果,③时间轴刻度缩放,④时间轴和其他控件联动显示,⑤鼠标放置到时间轴,显示具体时间。⑥通过定时器,实时更新时间轴完整代码可见。

2024-08-21 19:56:58 732

原创 (QT-UI)十三、通过定时器,实时更新时间轴

使用QTimer创建一个定时器,设置为每0.5秒触发一次,获取当前的系统时间,并且显示到时间轴上,看起来就像是时间轴随着系统时间更新。在源文件中,初始化,并且添加绑定槽函数,当设定时间间隔到期后,执行槽函数内的代码。最后通过start函数,启动定时器。当需要停止的时候,调用stop函数即可,后续只需要不断的start(500)和stop即可定时触发效果。在头文件中,添加QTimer和全局变量m_Timer。⑤鼠标放置到时间轴,显示具体时间。④时间轴和其他控件联动显示,①刻度上方文字显示,

2024-08-21 19:34:54 492

原创 (QT-UI)十二、鼠标放置到时间轴,显示具体时间

当鼠标缩放后,在鼠标滚轮事件中,添加上更新label的逻辑,由于鼠标滚轮事件wheelEvent(QWheelEvent *event)中,不方便直接获取鼠标位置,所以需要获取鼠标和时间轴的绝对坐标,也就是相对于屏幕左上角(0,0)点的坐标,然后就可以计算出鼠标相对于时间轴中心的偏移量,再根据比例计算出偏移的时间了。在mouseMoveEvent中添加上计算鼠标位移的代码,当鼠标移动后,计算一次。当然,这里也可以选择直接隐藏label,用户在缩放完后,只要再触发下移动,就可以重新显示准确的时间。

2024-08-02 09:22:17 446

原创 (QT-UI)十一、时间轴和其他控件联动显示

QDateTimeEdit上修改了时间,发送到时间轴上,时间轴上执行绘制,并且计算出来一个时间,然后又发送给了QDateTimeEdit,QDateTimeEdit接收到新的时间信号,然后又循环下去了。所以这里可以添加一个判断,当时间轴接收到时间后,和自身显示的当前时间做比较,时间不一致则更新时间轴上的显示,并且发出信号,去更新其他时间控件,其他时间控件接收到时间更新时,也和自身时间比较,不一致才更新。特别是存在多个时间轴和时间控件时,应该尽早制定一个最准确的时间,其余的时间控件参照核心来设置。

2024-07-30 11:38:40 490

原创 (QT-UI)十、实现时间轴缩放效果

在前两节中已经讲过了1小时间隔下,时间文字信息的计算,这里接着以1小时间隔切换到30分钟间隔为例,正中间红线的时间假设是12:34:56,原有的右边竖线的时间是12:00:00,切换后,应该是12:30:00,左边竖线的时间是13:00:00,切换后则依然是,12:34:56在12:30:00到13:00:00这个半小时间隔中。设置不同的时间间隔模式,然后通过按钮,或者鼠标滚轮事件来切换间隔模式,完成时间轴缩放。切换后,那么带入到时间轴偏移中则是,时间轴相当于向左移动了4分56秒的距离。

2024-07-26 18:59:18 504

原创 (QT-UI)九、实现时间轴前后拖动效果

计算时,先求出最左边的时间,然后后面的按照间隔,每次加1小时,就得到刻度时间。以上是拖动的原理,但是在实际应用中,存在着时间轴拖动的距离比较长,导致拖动的区域出现了一片空白的情况,这里就需要补充绘制空白的区域,经过观察可以看出,其实时间轴的竖线都是重复的块,所以补充绘制块即可,后面再单独计算文字信息。当按下鼠标时,时间轴的会随着鼠标的移动,而水平跟随移动等量像素位置,视觉上看起来,时间轴被拖动了一样,实际上则是时间轴上每根竖线,都根据鼠标移动的位置,而进行了偏移,所以在计算竖线的x坐标时,需要加上偏移量。

2024-07-24 16:39:22 1269

原创 (QT-UI)八、实现一个时间轴,包含刻度和文字显示

这里参考时钟,可以规划出整个时间轴长度上,可以分成12大块,每大块代表1小时长度,每大块里面再细分成6小块,时间上10分钟为一个刻度,每整点1小时显示一组文字信息,把10分钟的刻度画成短竖线,把1小时画成长竖线,就实现了时间轴的基础信息绘制。先将Widget的长度分为12块,再用width除12得到,每个大块的长度,并且绘制时,则是需要绘制出12+1根长竖线,其中长竖线是从height的一半,绘制到底部。然后将大块继续细分成6小块,这次绘制其中5根短竖线,短竖线是从height的3/4绘制到底部。

2024-07-22 19:22:41 934

原创 (QT-UI)七、将日历窗口和DateTimeEdit联合起来

如上面的日历窗口所示,实际上还添加了TimeEdit控件和确认button按钮,当点击确认按钮时,可以获取到日历中的日期,TimeEdit中的时间,然后以槽函数的形式向MyWidget类中发送,然后就可以写入到DateTimeEdit。先可以使用上一节中的LineEdit的自定义方法,在DateTimeEdit中添加button和布局,当点击DateTimeEdit中的按钮时,弹出日历窗口,并且将时间写入到日历中。需要注意,日历窗口上是只有一个日期的,所以还需要一个对应的时间窗口,来协同显示。

2024-07-17 08:44:46 508

原创 (QT-UI)六、自定义一个搜索框QLineEdit

1、首先继承QLineEdit,子类设为MyLineEdit,然后在构造函数里面添加一个搜索按钮button,和一个默认提示词。

2024-07-16 18:12:10 326

原创 (QT-UI)五、绘制子类悬浮窗时,解决子窗口stylesheet没有生效的问题

2、那么如果不想子窗口受到父窗口的影响,也可以不给子窗口传入this指针,而是父窗口下,创建Layout时传入this指针,再使用layout去实现子窗口的布局。缺点就是使用了Layout后,只能为平面布局,无法有窗口叠加的效果。3、当然还有既不用this创建子窗口,也不只用layout布局的方式,直接使用move通过全屏左上角零点,去计算子窗口位置的,这种方式虽然也能实现,但并不推荐,在窗口资源释放,父窗口拖动后坐标计算上,都非常的不妥。

2024-07-12 10:48:43 297

原创 (QT-UI)四、自定义绘制一个悬浮窗

而本文中的窗口实现方式,可以添加更加灵活的事件,让悬浮窗展示更长时间,也可以自定义边框和导航按钮,或者完全的没有边框效果,而Popup效果,存在windows的窗口立体边框效果,所以可以根据项目情况,灵活选择运用。,并且没有打印MyWidget,所以由此判断被遮住的部分,则没有办法点击到了,所以在设计这种悬浮条或者悬浮窗的时候,需要预先去考虑窗口的大小,位置,并且避免出现多个叠加的情况。设置后,当点击非左上角区域时,可以通过日志查看到,响应的是MyWidget,点击区域是MyWidget。

2024-07-12 10:36:00 563

原创 (QT-UI)三、设置窗口为无边框悬浮窗

如果想要同时设置其他Flag属性,需要加上s,即调用setWindowFlags,然后里面的属性按照“|”分格。2、将窗口设置为点击响应的悬浮窗状态,常见于windows菜单栏,日期设置栏。当点击窗口内部时,窗口保持不变,一旦点击非窗口内区域时,原有的悬浮窗会消失。3、将窗口设置为鼠标放置响应的悬浮窗状态,常见于qq头像预览,天气预览。可以通过捕捉控件的鼠标事件来实现,当进入控件,将子控件设置为可见,当离开控件,将子控件设置为隐藏。1、将窗口设置为无边框形式。

2024-07-10 18:30:25 347

原创 (QT-UI)一、清除widget下的所有子控件

查了网上的函数用法,发现主要是获取layout下的控件数,并且将其删除,但是这个并没有有效解决清除Widget下的所有子控件的问题,在使用时,仍然发现更深层次的子控件没有删除,反而永远的失去管理了。Count这个函数是返回layout下的本层次的控件数量,例如设置了一个两层的布局,外层的GridLayout计算count时,只会得出结果2,无论内层的HBoxLayout添加多少个,都和外层的无关。5.1、优先检查是否没有清除完,当执行完删除后,不妨再次获取一下count数量,看下是否还有其他的子控件。

2024-07-08 18:56:29 2308 2

原创 (QT-UI)二、设置子窗口Widget为全屏,并且取消全屏

首先需要重写子窗口的keyPressEvent(QKeyEvent* event)函数,在函数里面添加响应ESC键的逻辑,调用setWindowFlags(Qt::SubWindow)和showNormal()即可。1、将子窗口设置为全屏,按照顺序,先调用setWindowFlags(Qt::Window);再调用showFullScreen();2、将子窗口还原,这里使用按下ESC键作为信号,当键盘按下ESC键后,如果子窗口处于全屏状态,则将其还原为全屏前的尺寸。

2024-07-08 16:22:15 882

原创 (QT)二、使用lambda链接槽函数的写法

2、lambda表达式,也可以接受信号的参数,&QPushButton::clicked是函数指针,并没有给出明确的参数,但是可以在lambda的参数中,明确给出clicked()函数中已有的参数。这是一个最基本的表达式,在初始化时,当a为true时,表示connect链接成功,当运行时pushButton发出clicked信号后,执行打印“hi”在类B这里,首先包含类A的头文件,然后在connect函数中,接收类A的信号,并且直接在lambda函数中添加对应类型的参数。

2024-07-08 16:13:23 354

原创 C++ 获取时间戳和系统时间

从1970的零点到现在的毫秒数。2、获取当前系统时间。

2024-07-02 09:35:39 432

原创 (三)jsoncpp 使用问题,json转字符串被添加上换行符\n

原本的86}结尾变成了86}\n结尾,这对于其他的项目的json解析没有问题,但是做base64加密计算,以及sha256,md5运算,或者字符串匹配时,则会有影响,需要严格保持一致。3、解决办法②,修改write源码,去掉里面的换行符,当然这个办法,在不了解jsoncpp的源码时,是比较危险的,而且jsoncpp里面的实现也较为复杂,通常不建议。2、解决办法①,对string字符串对去除处理,缺点是需要在每个json转string的地方都加上,代码冗余,也容易遗漏。

2024-06-26 19:04:30 736 1

原创 (二)C++ jsoncpp的安装部署,使用lib和dll库

在弹出的窗口中,依次选择自己对应构建的VS平台,x64平台,然后点击Finish,如果vs没有识别到需要自行查阅资料,这里选择vs2019构建出来的工程,会生成对应vs2019的库(v142版本),一般高版本的编译器可以兼容低版本的库,但是vs2013的库,给vs2019使用时,可能就存在无法编译的情况,所以需要严格保持一致。另外pdb和exp文件不需要拷贝。4、打开后默认是Debug,x64,然后在解决方案资源管理器中找到jsoncpp_lib项目,右键将该项目设置为启动项目,然后点击重新生成。

2024-06-26 18:44:56 1072

原创 (一)C++ jsoncpp 的安装部署,使用源码直接在工程中编译

C++可以通过jsoncpp来实现解析,生成json文件,下载源码后有python压缩源码,cmake生成vs工程两种方式,除此,还有其他安装方式,可自行检索。6、在vs工程--项目属性--vc++目录--包含目录中,配置上这上一步中,生成的json.h的文件夹目录,方便vs能够查找到json的头文件。和jsoncpp-master\dist\json文件夹下面的json.h,json-forwards.h。5、接着拷贝jsoncpp-master\dist文件夹下面的jsoncpp.cpp。

2024-06-26 18:03:39 709

原创 C++开发环境,OPENSSL加密函数在工程中引用

然后打印加密后的数据,在调试时,经过base64加密后的字符串,还可以通过监控变量查看到,但是在sha256加密和md5加密后的字符串,则无法通过监控变量查看到。2、安装别人已经编译好的openssl后,检查bin,lib,include,并且在vs工程中配置好项目属性,配置后,应可以查看到如下所示的头文件路径,库目录,附加依赖的lib。可以从官网下载openssl的源码,然后引用到工程中。4、添加Base64加密函数。5、添加sha256加密函数。1、安装过程建议看这篇。6、添加md5加密函数。

2024-06-25 17:45:11 975

原创 C++开发环境配置,配置AI工具(二)

最近常在用gpt,有edge插件和vscode插件两种方式,都是简单登录后,免费提问,每天约20个问题,基本也够使用了。缺点是GPT版本低,只有3.5,并且给出的答案并不准确,往往需要再次修正。

2024-06-25 17:24:21 146

原创 windbg调试入门(一)

在编写完成后,右键点击项目生成,然后在文件夹中查看,生成的Project1.exe程序和Project1.pdb文件,其中pdb文件为存储的符号表,需要和exe的生成版本,或者生产时间保持一致。最后调试完毕后,使用qd退出当前运行的程序,对于已经调试到崩溃步骤的程序,如果想重新调试,则需要重新launch exe,使用reload命令则无法重新加载。在这个程序中,c的值被赋为0,当带入到func函数中的计算y时候,除0计算会导致程序崩溃,无法按期执行打印后面的x和y的值。在下面的0:000>位置输入命令。

2024-06-24 18:41:05 558

原创 C++开发环境配置,安装基础的开发软件(一)

1、社区版 vs2022或者最新版,从官网下载VS即可,点击后,会下载一个安装引导,后续勾选组件即可,同理vscode也是直接下载最新版。5.14及之前的版本,直接下载一个OpenSource-Windows-x64安装包即可完成。其中vsaddin助手下载,选择对应vs版本,安装时关闭vs,然后双击安装。5.15及之后的版本,需要使用在线安装的方式,即先下载在线安装包。5、下载Everything,用作查找文件。4、qt,依照版本,首选清华镜像下载。3、notepad++下载,可以采用备份路径下载,

2024-06-24 14:28:12 380

原创 const与引用

const与引用的结合用法

2024-01-30 10:53:54 573 1

原创 个人技术栈提升方向

2年多开发经验,在即将达到3年经验前,对技术做出梳理,形成框架

2023-11-13 11:39:00 608

原创 c++在字符串中截取指定内容

c++几种在字符串中截取指定内容

2022-09-30 16:28:48 23947 1

空空如也

空空如也

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

TA关注的人

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