Qt 实现 360 安全卫士

2023-11-17

作者: 一去、二三里
QQ 技术交流群: 242790253
个人微信: iwaleon(加我微信,邀请入 500 人微信群)
微信公众号: 高效程序员

回想起来,这也算是一个有故事的代码。虽然时间比较久远,但还是记忆犹新。

那就简单说说吧,也不枉费当年的一片心血!

说说我的故事

记得 2012 年的时候,我毕业去北京工作。当时面试的是 Java,但后来由于公司需要,所以误打误撞用了 C++。

领导:没 Java 项目了,最近要做网盘,服务端 PHP,客户端 C++,你对哪个感兴趣?

我:这 ~~~ 这 ~~~ 这 ~~~,我想想?

没想到,还没考虑好,第二天,工位上就莫名其妙的出现了一本 C++ Primer。

当时别说有多生气了,一行 Java 代码没写,却被迫搞了 C++,一千头草泥马崩腾而过!

为什么模仿 360

从 Java 到 C++ 的痛,谁能了解?不会,不会,那可是真不会!

没办法,就来回请教周围的同事,这时 Z 哥给我了一个有着深远影响的建议 - 总结、积累、写文章记录。

在那之后,我只能硬着头皮自己研究 C++/Qt,但那会儿 Qt 的资料很少,所以就想办法每天坚持练习,并把总结的东西发布到了博客上(当时的昵称还是“奋斗ing孩子”)。

但自学的东西是很零散的,无法覆盖项目的整体流程,因此心里就萌生了一个想法 - 模仿别人的软件,看看他们是怎么实现了。

当时,我把电脑上的客户端几乎翻了个遍,最终把目标锁定到了 360 上。因为从大学到工作,我一直在用它,很顺手,而且界面非常简洁、美观。

后来就是没日没夜的研究 360,研究它们的素材以及提取方式,研究它们的样式布局,研究它们前后端交互等等。

最终经过一个多月的努力,才有了第一版的 Qt 360safe … 再后来,就有了第二版(地址:Qt 实现 360 安全卫士)。

当时实现完之后,其实内心是很激动的,因为网上很难找到这么漂亮的开源界面。而自己从头到尾一个人,完整的实现了一遍,纯高仿!

因为研究的过程确实很痛苦,所以为了帮助和我一样煎熬的小伙伴,我就把源码发到了 CSDN 上,还专门建了一个群,用来沟通和交流 Qt。

想必很多人都看过这个代码,虽然现在看起来比较粗糙,但至今我认为效果还是蛮不错的!

重装上路

看完上面的故事,想必大家也知道了,这个代码其实分享于 10 年前,是我在学习 Qt 的时候所写。

至于为什么现在要重新发出来,主要有以下几个原因:

  1. 之前发的那个帖子,历史太过久远,新版 Qt 无法正常运行;
  2. 当时的代码是基于 VS 开发的(sln),无法实现跨平台(需要自己编写 pro 或者 cmakelist.txt);
  3. 代码在论坛的资源里,太难以维护。

再加上最近有好几个小伙伴一直私下找我要源码,所以思前想后,决定上传到 Github 或者 Gitee,这样更加友好一些。

此次的代码,我没做太大改动,主要是为了适应 Qt6 添加了 cmakelist.txt,并让代码更好的实现跨平台。

可能有小伙伴在想:“为什么不优化一下代码呢”?原因很简单,之所以没优化,不是因为之前的代码写的有多好,只是因为想给以后留下一些念想罢了,毕竟互联网有记忆,人也要有记忆。

好了,故事就分享到这里,是时候说正事了!

由于 Qt 360safe 是我当初自学 Qt 所写,所以本次再次分享的目的也很简单:和之前一样,初心不变,希望帮助那些正在或者将要被 Qt 蹂躏的小伙伴们,让他们能够快速上手 Qt。但是仅供学习,仅供学习,仅供学习,不可用作任何商业目的,否则后果自行承担。

最终的效果图以及源码,详见正文。

界面效果

界面功能丰富,主要包含:主界面、更换皮肤、新版特性、关于我们、用户登录(360、人人网、新浪可切换)、用户注册、系统托盘、国际化等!

主界面切换

在这里插入图片描述

更换皮肤

在这里插入图片描述

用户登录

在这里插入图片描述

国际化

在这里插入图片描述

新版特性

在这里插入图片描述

系统托盘

在这里插入图片描述

源码地址

最后,寻找当初的勇士们。如果你当时看过这段代码,也加过以前建的 QQ 群 - Qt 技术交流群(已解散),欢迎再次回归,请加新的 Qt 技术交流群: 242790253

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 实现 360 安全卫士 的相关文章

  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • Qt程序部署到多平台,如何?

    我是 Qt 编程新手 我想开发一个程序 我想在 Windows Linux ubuntu 和 Mac 上运行 听说Qt支持多平台应用程序开发 但我的问题是 在我部署或编译后 任何 Qt 库都需要在 Ubuntu 中运行这个应用程序吗 如果您
  • 如何创建QWidget的屏幕截图?

    我在 Qt Creator 中做作业 在其中绘制 QWidget 并且需要保存此 QWdiget 的某些部分 我试图解决这个问题 QPixmap pixmap pixmap copy rectangle rectangle is part
  • (如何)我可以抑制未找到包配置文件的警告吗?

    我正在尝试创建一个CMakeLists txt尝试查找的文件Qt5 如果失败 则尝试回退到Qt4安装 该脚本到目前为止有效 但如果出现以下情况我总会收到警告Qt5未安装 注意FindQt5 cmake是由提供Qt5并且仅当以下情况时才可用Q
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

    我正在尝试根据阿波罗尼乌斯图生成加权沃罗诺伊 我正在使用 CGAL 库 我找不到如何从 apollonius 获取面和顶点的好例子 我有以下类型定义 typedef double NT typedef CGAL Cartesian lt N
  • 向 Qt 样式表添加特异性时丢失样式

    这是我的代码 const QString STYLE SHEET background color rgba x x x y border 1px solid gray border radius 0px border top 1px so
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • Qt:如何连接到 SQLite?

    我安装了 SQLite3 解压到 c sqlite 创建了一个数据库 c sqlite mzsales 现在我试图在 QTableView 中显示其内容 QSqlDatabase db QSqlDatabase addDatabase QS
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 如何为 Windows 构建静态 Qt 库并将其与 Qt Creator 一起使用

    我已经下载了以下 Qt 源 http download qt nokia com qt source qt everywhere opensource src 4 7 3 zip http download qt nokia com qt
  • Mac 上的 Qt — 如何访问帮助菜单中的“搜索”

    我正在将我的 Qt 应用程序移植到 Mac OS X 在 Windows Linux 上 我使用 QLineEdit 在帮助菜单中提供搜索功能 In Mac OS X I saw something like this is built i
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码

随机推荐

  • CP4.矩阵的LU分解

    LU分解 将矩阵A分解成的形式 称作矩阵LU分解 L代指下三角矩阵 U代指上三角矩阵 首先用到的是前面讲过的消元法 以下为例子 通过消元操作 最后矩阵A变成了一个上三角矩阵U 那么只要上式左乘一个 就可以转化为 这里的就是L矩阵了 所以 也
  • javac编译时出现GBK报错(错误:编码GBK的不可映射字符)

    javac编译时出现GBK报错 错误 编码GBK的不可映射字符 一 这里列出我遇到的三种情况 代码格式分别为 ANSI UTF 8 无BOM的UTF 8 这里我用的是notepad 进行编写 ANSI格式 首先我们先创建一个 java源文件
  • 说说JUC三个类:CountDownLatch,CyclicBarrier和Semaphore

    目录 CountDownLatch CyclicBarrier Semaphore 总结 在JUC中 有三个工具类来辅助我们进行并发编程 分别是 CountDownLatch CyclicBarrier和Semaphore CountDow
  • 使用vue-cli来搭建vue项目

    使用vue cli来搭建vue项目 一 创建所需要的文件夹 二 安装vue cli 三 使用脚手架vue cli 2 X版 来构建项目 前提 搭建好NodeJS环境 一 创建所需要的文件夹 1 首先在Node js的文件夹里面建上 temp
  • S71200外围设备接线-输入接线

    S71200外围设备接线 输入端子接线 含NPN和PNP 传感器接线 作为一个PLC的初学者 我觉得第一件事请并不是学习什么TIA Portal软件或者编程指令 而是了解PLC的系统参数和外围设备接线 上面的一张文章 我通过图文的方式简单讲
  • 问题 E: 十进制整数转二进制

    十进制整数转二进制的方法是 除以2 取出余数 商继续除以2 直到得到0为止 将取出的余数逆序即可得到对应的二进制数的各位 例如 22转二进制的计算过程 22 2 11 余0 11 2 5 余 1 5 2 2 余 1 2 2 1 余 0 1
  • 小程序获取用户信息实现一键登录

    文章目录 旧版获取用户信息实现登录流程 login页面代码 个人中心页面代码 全局app vue代码 下面是小程序获取用户信息最新调整的方式 温馨提示 以下小程序登录方式只适用于2 27 1版本库以下使用 详情请看微信官方文档调整 旧版获取
  • python中的连续比较是什么_在python中提取连续行之间的差异

    你的例子表明你想要在一对线之间进行比较 这与将其定义为line n 1 line n 不同 后者将给出5个结果 而不是3个 在 结果也取决于你认为的差异 它是位置性的 还是仅仅基于奇数行中缺失的字母 还是两者的差异都适用 例如 boat t
  • 优酷 YouTube Twitter及JustinTV视频网站架构设计笔记

    本文是整理的关于优酷 YouTube Twitter及JustinTV几个视频网站的架构或笔记 对于不管是视频网站 门户网站或者其它的网站 在架构上都有一定的参考意义 毕竟成功者的背后总有值得学习的地方 虽然有些文章的发表时间有点久了 但是
  • 将第三方库改为我自己想要的

    将第三方库改为我自己想要的 方法 比较常用的 给出一些例子 React组合方法 高阶组件方法 方法 修改第三方库以适应自己的需求可以通过多种方法实现 下面是一些常见的策略 继承 通过创建继承自第三方库组件或类的子类 你可以重写或扩展其方法
  • Keil警告和错误语句与消除方法笔记

    遇到的keil相关错误 警告内容在这里进行更新 Warning 1 D last line of file ends without a newline 文件最后一行不是新行 解决 保证文件最后一行什么符号也没有 167 D argumen
  • MySQL索引原理B+树

    B 树索引是B 树在数据库中的一种实现 是最常见也是数据库中使用最为频繁的一种索引 B 树中的B代表平衡 balance 而不是二叉 binary 因为B 树是从最早的平衡二叉树演化而来的 在讲B 树之前必须先了解二叉查找树 平衡二叉树 A
  • shader学习笔记(二)纹理采样

    资料参照 Unity Shader入门精要 冯乐乐 第7章 基础纹理 技术美术百人计划 图形 1 3 纹理的秘密 庄懂的技术美术入门课 美术向 直播录屏 第9课 Unity Shader 入门到改行4 最简纹理采样 1 纹理是什么 1 宏观
  • 程序员面试智力题集锦

    1 你让工人为你工作7天 给工人的回报是一根金条 金条平分成相连的7段 你必须在每天结束时给他们一段金条 如果只许你两次把金条弄断 你如何给你 的工人付费 参考答案 day1 给1 段 day2 让工人把1 段归还给2 段 day3 给1
  • 数据挖掘基础一

    一 数据挖掘 又称为数据库中知识发现 Knowledge Discovery from Database 简称KDD 它是一个从大量数据中抽取挖掘出未知的 有价值的模式或规律等知识的复杂过程 数据挖掘的定义过程描述如下图所示 从图中可以看出
  • Hessian4.0.7反序列化BigDecimal类型Bug

    Hessian虽好 bug也不少 今天遇到hessian反序列化bigdecimal类型 传入参数为121 但经序列化后却为0 问题在BigDecimal类型的应该使用BigDecimalDeserializer 在basic没有BigDe
  • 【Qt串口调试助手】1.8 - 修改Qt应用图标和窗口图标

    修改Qt应用图标和窗口图标 GitHub源码 Qt串口调试助手下载 修改应用图标 首先选择一张喜欢的图片 来作为应用图标 图片格式必须为 ico easyicon net 有很多可供下载的资源 下载好后 将其放入工程目录 之后添加到 Qt的
  • X509证书结构解析

    X509证书是采用DER编码的ASN1结构数据 Certificate SEQUENCE tbsCertificate TBSCertificate signatureAlgorithm AlgorithmIdentifier signat
  • 【技术干货】数字电路电平标准

    信号的逻辑电平经历了从单端信号到差分信号 从低速信号到高速信号的发展过程 最基本的单端信号逻辑电平为CMOS TTL 在此基础上随着电压摆幅的降低 出现LVCMOS LVTTL等逻辑电平 随着信号速率的提升又出现ECL PECL LVPEC
  • Qt 实现 360 安全卫士

    作者 一去 二三里 QQ 技术交流群 242790253 个人微信 iwaleon 加我微信 邀请入 500 人微信群 微信公众号 高效程序员 回想起来 这也算是一个有故事的代码 虽然时间比较久远 但还是记忆犹新 那就简单说说吧 也不枉费当