自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (5)
  • 收藏
  • 关注

原创 Qt PingFang字体在Debian/Ubuntu上安装

fc-cache -f -v我这边是这样修改的:

2023-11-02 19:07:00 220

原创 Qt 窗口无法移出屏幕

设计一个缩进/展开widget的效果,抽屉效果。看到实现的方法有定时器里move窗口,或是使用QPropertyAnimation。

2023-11-02 11:51:36 444

原创 qt 双击可执行文件提示没有平台插件Qt platform plugin

从qt安装目录下拷贝platforms文件夹,放在你要执行的可执行目录里。

2023-10-26 15:20:46 678

原创 去除QPushButton边框上的白点

使用border:3px solid #35FFFAF0;出现上面一行border上白点。使用border:3px solid rgb(89,87,84);

2023-10-24 14:21:19 97

原创 线程或进程间通信

面试官常会问一个问题是,多线程你用过吗?你用过什么样的同步机制。以下是我的回答:1 生产者消费者模型一般使用条件变量。大多数情况是socket编程,串口编程;

2021-06-18 19:52:16 154

原创 编码时一些让人纠结的问题

1 耦合与代码复用2 代码膨胀如果没有复用的思想,就会浪费很多时间,其实就是常说的重复造轮子的问题。3 抽象化或统一处理还是穷举所有类型3.1 前者代码量少逻辑复杂,后者逻辑上简单,但是代码多。3.2 其实我更倾向于统一处理,因为你不知道需求还要变化到什么时候,你还要跟多久。如果统一处理,其实就应对了所有变化。4 代码复杂度的平均分配4.1 不平均分配,就会出现有的地方...

2019-08-15 11:13:47 209

原创 如何规范代码中的常量写法

出现常量的几种可能性:(1)服务之间的url,一旦双方约定好,变得可能性和必要性很小;(2)传感器的参数配置,比如agv,在一些场合需要修改检测距离,否则就越不过障碍,这时候适当降低了安全性,但也没有办法;(3)兼容不同的外部设备,比如不同的控制器,不同总线的继电器组等;(4)页面的访问权限,这个都是事先定好的,也可以看作是常量。因为这个涉及到整个系统,用微服务来管理或是通过数据库

2017-08-22 15:25:21 2504

原创 关于产品设计中的几个权衡点

第一个,安全性。这个是最基本的要求,但是很多设计代码的人会写正确的功能。这个在开始的时候感觉进度很快,但从较长时间来看,后续的测试和优化将会花费更多时间,这个大概可以叫做业绩驱动开发吧,因为市场很着急,老板很着急。不安全的设计会造成最差的客户体验,在工业领域将更严重,要么损坏作业对象,要么损坏机器,更恐怖的是伤害到人。第二个,性能。有一些产品可以工作在恶劣的环境,代替人的工作。但是由于速度慢,...

2017-08-22 14:30:54 1437

原创 再难也不要放弃

曾做过一个项目,产品已经出货,后发现一个致命的线程同步的问题,造成设备故障频频。此时面临的问题是:(1)涉及到大量代码修改;(2)测试环境的不稳定亦不能排除,例如网络问题,设备中各种传感器的问题;(3)令人窃喜的是该问题尚未通知项目经理,只有我知道。此时自己的心理过程是这样的:(1)该问题比较低级,值得质疑,不能够向领导暴露这个问题;(2)尽可能解决掉;

2017-02-28 10:29:29 767

原创 关于软件设计中的分歧---单例与全局变量

背景:C++对于系统的唯一实例的设计分歧:(1)使用单例返回的指针,实现完全的面向对象的设计;(2)使用全局实例指针,代码看上去更简洁;分析:对于C++编程来说,两者从实现软件功能的结果来看,没什么区别,技术细节这里也没有深入的研究。

2016-12-09 09:52:15 636

原创 多线程编程注意事项

(1)sleep主动暂停线程执行,并挂起该线程,不分配时间片,但是调度者需要检查睡眠时间是否到了。sleep(0)将该线程剩余时间片作废,请勿在主线程中使用,这会减慢消息的处理。(2)如果消息队列中一条消息处理的时间超过100毫秒,建议另建线程处理。(3)主线程用于处理用户输入,其生成的二级线程处理与用户输入不想关的任务。(4)一般工作者线程处理一些后台运算业务,用户界面线程用于显示运

2016-12-06 11:04:21 2728

原创 关于软件设计中的分歧---资源清理

背景:软件退出,即关闭软件。分歧:(1)甲认为软件退出,进程结束之后操作系统将其占用的资源进行清除,即将其占用的内存清除,将其打开的文件关闭,其内核使用对象递减,同时所有用户对象和GDI对             象均被撤销,所以不需要对各线程的退出做顺序化处理。            (2)乙认为应该严格控制软件退出时各模块的顺序,这样可以避免软件退出时发生的不可预期的错误。结论:(

2016-12-06 10:28:14 390

原创 关于软件设计中的分歧---生产者消费者

背景:甲提供位置数据,乙使用该数据进行导航。分歧:乙认为甲不要提供重复的数据,原因是占用网络带宽及CPU。甲认为,提供重复的数据表示自己存在,没有死掉。结果:甲坚持发送,乙不得不做处理。结论:(1)各自保证自己的正确性,即假设对方犯错;             (2)如果资源十分宝贵,则需要双方更高一级领导的协调;

2016-12-06 10:04:18 424

原创 STM32串口中断接收一个完整的数据帧

代码运行条件:(1) 大端发送;(2) 上位机发送一帧数据的时间间隔不能大于主循环周期;(3)数据帧满足下面格式: 帧头部(Head)类型(Type)长度(Length)值(Value)CRC校验2字节1字节1字节X字节2字节

2015-02-10 12:56:05 22183 7

原创 STM32定时器实现100毫秒保存一次数据到SD卡

假设使用定时器3每1毫秒定时;保存至SD卡的函数是StartSave();第一种情况:定时器快,主循环慢1、代码设计1(错误的设计)int cnt = 0; //计数//TIM3中断处理函数void TIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) {

2015-02-10 10:20:28 5740 2

原创 指针数组和二重指针的等价使用

#include "stdio.h"int main(){ char *p[] = {"aaa","bbb"}; char **pp = p; printf("%s",p[0]); //输出结果是:aaa printf("%s",pp[0]);//输出结果是:aaa return 0;}

2014-05-08 23:40:43 2414

原创 友元解决了那些问题

我想使用对方的私有乘员函数,必须对方声明我是它的朋友才行。   然后我把对方作为我的函数参数使用。一个管理类对象DeviceMgr包含被管理对象Device,DeviceMgr可能频繁使用到Device的私有乘员。这样可以在Device里面声明说,“DeviceMgr是我的朋友类”,这样就可以在DeviceMgr里面方便的使用Device的私有成员了。当然,为了简洁,请不要考虑De

2014-04-14 14:32:38 549

原创 文本编辑、控制台交互(对* #做处理)

通过这个试验可以练习一下用户和控制台交互的过程。这是华为的一道机试题:输入一段字符,碰到‘*’舍弃,遇到‘#’取消本次输入。例子:若输入:How are** you!输出:How are you!不能使用文件操作函数,不能包含.h头文件。不能加预编译指令。(1)下面是使用scanf 、string 、sprintf三个函数来实现。// 文本编辑.cpp : Defi

2014-04-02 20:29:55 658

原创 ucosII信号量---实现较快数据采集与较慢数据处理的同步

Ucos使用新号量实现两个任务的同步例子:任务A、B,任务B需要在屏幕上打印任务A得到的数据包。解决的问题:任务A速度快,任务B速度慢。也就是B对于A来说有丢包。设计思想:新建一个缓冲区copy任务A的数据包,copy的时机是B显示完成;任务B显示的时机是任务B拷贝完成。代码如下:OS_EVENT *startDrawFigure = NULL; //开始画频谱线OS_

2014-04-02 19:55:16 1646

原创 软件升级---同类型设备如何管理

应用场景:系统对同类型设备如何管理,扩展的方法是DLL和该设备文本信息DLL加配置文件对软件升级的思路及设计目标:本系统可以对所有类型的设备进行支持。(1) 对与系统关联的所有类型设备统一管理;(2) 只需要修改ExtDevice.dat该类型设备配置信息和提供相应的DLL就可以工作,不需要变动应用软件。方法:由一个统一的dll来实现整体的功能。如打开、关闭设备,与

2014-04-02 19:48:27 861

原创 串口通信异常---串口参数设置无效

硬件环境:PC机、232转485串口、RS485_RTU26继电器软件环境:VC6.0, DTS_ViewAnalysis.exe动态调用ExternalRelayCardMgmt.dll测试工具:串口监控Serial Port Monitor、串口助手、串口交叉线现象1:打开pc机,运行测试程序,串口通信失败。现象2:打开PC机,随便使用一个串口助手,对当前使用的串口进行设置,关

2014-04-02 19:26:35 11549 1

原创 STM32片外内存的使用

1、STM32分为片上内存和片外内存。(1)片上内存用于任务栈,变量等。(2)片外内存一般编程人员会自己写内存管理方便的函数。例如通过总线挂载一个16M的内存,地址0x68000000。用户可以管理一个指针,通过移动指针来管理这块内存。包括分配和释放。typedef struct { WORD wFlag; WORD wLen;}TReserveSramInfo;

2014-04-02 19:15:42 7322

原创 VC DLL的创建和调用 第一篇

假设DLLTest.exe(工程名:DLLTest.dsp)调用库DLL1.dll(工程名:DLL1.dsp)中的函数。假设这两个过程的编译方式都是Win32 Debug编译方式。辅助工具:(1)    VC 安装目录下的Depend,查看DLLTest.exe文件依赖的所有DLL文件。(2)    VC 安装目录下的:Dempbin查看dll所输出的函数名,命令格式:

2014-03-02 19:48:52 868

原创 关于“递归”的探讨

1、快速判断一个整数是否是2的整数幂次方,并判断出来是多少次方  算法设计:整数的移位和除以2在效果上相同。例如8/2=4,8>>1 = 4;3不是整数次幂,返回-1//命名为mylog2,math.h头文件中包含log2这个函数#include int mylog2(int value){ if((value & 0x01) == 1)//当不是整数次幂的时候直接退出

2013-12-07 10:56:06 602

原创 模式匹配的问题

如何匹配一个字符串,比如字符串为123fhdaofoda89fdshafdsa,匹配的模式为?代表一个字符,*代表不限制长度的字符。比如 ?23h?ao*dsa,可以匹配上面的字符串。如何确定该算法。

2013-12-01 22:54:02 733

原创 路由器设置

路由器选择上网方式有:PPPoE(ADSL虚拟拨号);动态IP(以太网宽带,自动从网络服务商哪里获取IP地址);静态IP(以太网宽带,网络服务商提供固定IP)这里选择动态IP,在设置的时候LAN的地址不能使用默认,可以设置为10.2.0.1,子网掩码设置为255.255.0.0来解决该问题。遇到这个为题,记录下来,后续再研究下。

2013-12-01 22:46:19 658

原创 C字符串方面的问题

第一题:母串里面查找子串(1)递归方法#include int strstr_count(const char *s, const char *child){        char *p = strstr(s, child);        return p ? 1 + strstr_count(p+1, child) : 0;}(2)模板匹配方法#inclu

2013-11-08 19:11:43 735

原创 查表法的应用举例

第一题、请问怎样将随机输入的字符串,统计里面每个字符所出现的次数??算法设计:关于这方面的后续做整理!

2013-11-08 12:20:26 1750

原创 C/C++笔试面试常见题目2

第一、转int到str//使用函数sprintf将整形数字格式化 char* int2str(int nSrc,char*sDest) { if(sDest == NULL) return NULL; char nSrc_arry[64] = {0}; sprintf(nSrc_arry,"%d",nSrc); memcpy(sDest,nSrc_arry,s

2013-11-01 16:27:09 1190

原创 C/C++笔试面试常见问题1

1、STL中智能指针的缺陷auto_ptr指针是一个RAII对象,它初始化时获得资源,析构时自动释放资源(生命期结束).它的缺点数不胜数:(1)auto_ptr要求一个对象只能有一个拥有者,严禁一物二主(2)缺少对引用数和数组的支持。(3)不可将auto_ptr对象作为STL容器的元素。C++标准明确禁止这样做,否则可能会碰到不可预见的结果。(这一条晕死一大片)。

2013-10-31 09:42:38 1214

原创 -0在计算机中的存储是什么呢

依据:(1)在计算机系统中,数值一律用补码来表示(存储).(2)正数的补码与原码相同。(3)负数的补码等于其绝对值的原码各位取反,然后整个数加1的数值。依据以上三条可断定:-0在内存中的存储可以这样计算:-0是负数,依据(3),其绝对值0各位取反为0xff ff ff ff(假设机器是32位),然后加1,得到0。所有-0在内存中存储是0x00000000。这个确实特

2013-10-16 10:13:01 3174

原创 socket bind在客户端和服务器端使用的区别

1、client bind(1)bind端口由进程选择一个端口去连服务器,(如果默认情况下,调用bind函数时,内核指定的端口是同一个,那么调用多个调用了bind()的client程序,会出现端口被占用的错误)注意这里的端口是客户端的端口。如果不分配就表示交给内核去选择一个可用端口。(2)bind IP地址相当于为发送出去的IP数据报分配了源IP地址,但交给进程分配IP地址的时候(

2013-10-15 18:18:49 2609

原创 PJNATH与UDT的整合

目的:使用PJNATH中私网穿透和UDT的快速发送方法:将用PJNATH的接收和发送替换UDT中的相应部分第一节  修改PJANTH的demo位于 http://www.pjsip.org/pjnath/docs/html/group__samples__page.htm 的使用给控制台交互程序。对这个程序做一个介绍,交互界面如下:使用介绍:输入:c或者create创建

2013-10-02 11:16:01 3981 3

原创 ShowWindow后面UpdateWindow的作用

#include #include //sprintf//CALLBACK即_stdcall调用方式LRESULT CALLBACK WinSunProc( HWND hwnd, //窗口句柄 UINT uMsg, //消息 WPARAM wParam, LPARAM lParam );int WINAPI WinMain( HINSTANCE

2013-10-02 10:33:36 2364

原创 C/C++编译或链接,错误汇总

(1)环境:eclipse c语言;错误现象: 找不到库文件里的函数,编译时无错误,即灭有提示找不到库,链接时提示找不到该函数。原因:库之间有依赖性,有先次序之分。(2)环境:eclipse c语言;错误现象:编译时报出implicit declaration错误原因:头文件中声明的函数和定义的函数不一致。确认后逐步整理吧!

2013-09-19 08:17:33 1180

原创 大小端的问题的话语场景:代码移植和网络通信

只知道大小端是什么意思,而不知道大小端的应用场景,显然对这个东东是不可能有深刻理解的。(1)为什么出现这个东西?答:在各种计算机体系结构中,对于字节、字等的存储机制有所不同。(2)何谓大端,何谓小端?答:这个有点绕。简单的:if(0x12345678 & 0xFF == 0x12) Byte Endian,即高位的数据放在低位的地址处。小端反之(3)不同计算机体

2013-09-17 16:36:06 1635

原创 http digest认证过程分析及例子

验证过程:          步骤一、客户端向服务器申请数据                        ****************************Request******************************GET /auth HTTP/1.1(\r\n)Accept: */*(\r\n)Host: 192.168.1.15(\r\n)Co

2013-09-14 11:34:33 3708

原创 memcpy和sprintf的区别

应用场景:如果对于协议传输数据,memcpy比较好,因为可以严格控制存入数据的位置。但是对于向一块内存连续的存入数据sprintf是比较好的选择。一、memset函数原型void *memset(void *s, char ch, size_t n);函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。memset:

2013-09-14 10:57:21 2506

原创 非阻塞socket之send的使用---异步send

(1)错误现象:在发送小量数据的时候没有问题,一次发送完毕。但是当发送1008046个字节的时候,由于数据较大,系统一次约发送46336个字符,但是时而发送成功,时而中间断掉。现象是不稳定,并且返回Resource temporarily unavailable的errno,资源暂时不可用,显然这是由于没有约束没有限制的把数据抛给系统。显然是不对的。需要发送的条件成立的时候才可以接着发送。后来

2013-09-13 18:13:24 15521 1

原创 二重指针、指针引用的效果分析

编译环境:Visual Studio2010 一、代码分析这是做了一个分别使用二重指针和指针的引用带回函数处理结果的例子,左边图使用二重指针,右边图使用指针引用。可以看出来就这个问题来说,使用指针引用简单。但是对于纯C语言的代码,没有引用的概念,就不可用了。二、调试结果下面的结果是调试到上左图黄色箭头处,各变量的值。明显&rst1和dest的值相等,用通俗的话说是dest保

2013-08-30 22:15:35 941

MSDN学习MFC的方便工具

可以不用安装MSDN,直接只用这个工具就可以学习MFC,和MSDN的作用类同!

2012-09-21

MFC深入浅出电子版

MFC深入浅出,经典中的经典!作者在网上找到了这本书的Web版,我为它制作了详细的目录,并将所有的网页资料打包成了一个CHM文档,这样可以更加方便的浏览和保存这本经典之作,希望我的VC/MFC编程技术有一天可以达到李老师的境界吧!

2012-09-21

VC显示行号

用于显示行号,这样在代码很多的时候方便查看!

2012-09-20

工业检测界面

这是我为公司开发的一个界面,由于需要保密我删除了里面的处理部分,保留了程序的框架。只是为了和大家交流,由于最大上传50M,删除了一些代码,刚开始运行的时候有提示,不过不用理会,执行完就可以了

2012-09-20

在指定路径下找某个类型的文件

在指定路径下找某个类型的文件,例如在文件夹里找dat类型的文件

2012-07-11

空空如也

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

TA关注的人

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