
C++
文章平均质量分 66
jirryzhang
。
展开
-
等额本金算房贷以及提前还款应还利息
#include <iostream>using namespace std;double get_every(int month, double lilv, double loan) { return loan/(double)month + loan*lilv;}double get_lixi(int month, double lilv, double loan,...原创 2019-12-23 01:14:47 · 703 阅读 · 0 评论 -
C++实现黄金分割法搜索
今天上最优化数学课的时候,老师讲的是黄金分割法。布置作业要求用该方法求一个函数的最优值,但是区间长度比原题缩小了十倍,感觉迭代次数可能会增加很多,按计算器很麻烦,只好用c++帮忙算中间结果了。代码如下:#include #include using namespace std;double f(double x){ return (exp(-x)+x*x);}void solve原创 2016-11-29 12:49:15 · 5613 阅读 · 0 评论 -
C++的TCP/UDP通信实现
最近要做一个用于监控和显示自动测试柜运行状况的监控中心的项目,就需要从测试柜获取运行状况的信息,处理后显示在一台服务器上。由于以前跟着教我C++的老师做一个基于六维力传感器的工业机械臂牵引示教系统的时候,看着老师亲自写过UDP通信(传感器的数据是通过UDP的方式传出来的)相关的代码,有了一些了解,所以决定用UDP的方式来实现。由于基本是零基础,所以只能自己一点一点调试。一般来说C++都会设两个原创 2016-12-10 23:20:30 · 8419 阅读 · 2 评论 -
TCP通信常用的send,sendto,recv,recvfrom函数详解
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;第二个参数指原创 2016-12-12 18:48:57 · 39365 阅读 · 5 评论 -
用VS查看程序的dll依赖项
用VS的dumpbin命令可以查看目标程序许的dll依赖项打开 开始->所有程序->Microsoft Visual Studio 20xx ->Visual Studio命令提示(20xx),其中xx表示你的VS版本,笔者的是2010。比如查看路径为F:\econDe.exe的程序econDe.exe程序依赖哪些dll文件,可用如下命令c:\Program Files (x86)\M原创 2016-12-22 16:30:31 · 34054 阅读 · 0 评论 -
C++创建dll文件及使用方法
一、DLL的创建 创建项目: Win32->Win32项目,名称:dllTest,应用程序类型选择dll,不要去掉预编译头添加新建项头文件dllTest.h,如下#ifndef DllTest_H_#define DllTest_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllimport) #else#de原创 2017-01-13 14:30:00 · 15107 阅读 · 1 评论 -
头文件声明类的时候的一些需要注意的问题
今天编译项目的时候,犯了一个低级错误,VS报错报的莫名其妙,错误信息如下1>d:\softwareforcode\qt4_8\include\qtcore\../../src/corelib/kernel/qeventloop.h(51): error C2146: 语法错误: 缺少“;”(在标识符“QtCoreModule”的前面)1>d:\softwareforcode\qt4_8\in原创 2017-01-15 21:57:31 · 1661 阅读 · 0 评论 -
VS2010使用qt翻译的方法
选择菜单"Qt"-“Create new Translation File”,选“中文简体中国”,确定,此时解决方案资源管理器会多一项Translation Files,里面有*.ts文件,右键菜单选择lupdate,再选择菜单“Qt”-"Launch Linguist",在Qt Linguist中翻译后,保存,回到VS,右键*.ts,选择Irelease,即得*.qm文件。在qrc文件中添加这个原创 2017-01-15 22:01:27 · 2888 阅读 · 0 评论 -
visual studio给编译的exe程序添加程序图标的方法
在项目中添加资源文件(*.rc),在资源视图中,右键资源文件,选择“添加资源”,在弹出的菜单选择添加类型-图标(icon),点击“导入”按钮,在弹出的选择对话框选择自己想要添加的程序图标文件(*.ico),保存资源文件后重新编译,即可看到编译出来的exe的图标即为刚刚选择的图标。原创 2017-02-17 20:22:00 · 14234 阅读 · 0 评论 -
python qt(pyqt)的文件打开、文件保存、文件夹选择对话框
首先导入pyqt4模块:import PyQt4.QtCore,PyQt4.QtGui获取文件路径对话框:file_name = QFileDialog.getOpenFileName(self,"open file dialog","C:\Users\Administrator\Desktop","Txt files(*.txt)") ##"open file Dia原创 2017-03-01 12:35:30 · 40860 阅读 · 3 评论 -
qt连接信号与槽的问题报错的原因
有一个A类对象的指针a,A有信号signalA()和槽函数slotA(),连接这对信号与槽一般用如下语句:connect(a,SIGNAL(signalA()),this,SLOT(slotA()));但是若a指向的对象没有实例化,该语句会报错。因此在连接信号与槽时,应该确保发送者和接收者都已经实例化,以免报错!原创 2017-03-01 16:55:13 · 3227 阅读 · 0 评论 -
Visual studio打不开Qt资源文件qrc的解决办法(无法使用Qt的qrc编辑器)
Qt的qrc(资源文件)文件默认是用qt资源编辑器打开的,这个编辑器程序是qrceditor.exe。当VS无法用这个编辑器查看qrc文件时,在vs工程解决方案中右键单击qrc文件,选择(打开方式...),在弹出的界面中点击(添加...),找到Qt-VS-Add-in插件的安装目录,假设($Qt4VSAddin)是你安装的Qt vs插件的位置,在弹出的添加打开方式对话框中填入程序名称:($原创 2017-03-03 12:42:52 · 9738 阅读 · 0 评论 -
Qt添加自定义控件并在qtDesigner中使用以及链接失败的解决方法
开发环境:VS2010+Qt4.8.6+Qt_Vs_Add_In首先用VS新建一个项目,项目类型选择Qt4 Designer Plugin,然后按照普通的Qt项目一样写好代码或者设计Ui文件,随后生成解决方案。该项目和普通Qt应用唯一的区别就是不会生成exe程序,而是生成动态链接库dll和lib。随后,将生成的dll和lib文件复制到QtDir\plugins\designer下,再打开Q原创 2017-03-03 14:08:39 · 4858 阅读 · 0 评论 -
Qt给父widget加上styleSheet(添加背景图)而不改变子widget的styleSheet的方法
比如用stylesheet给widget加背景图,可以用qt designer修改ui文件相应widget的stylesheet,在里面添加border-image: url(你的图片路径)。比如我的图片路径为“:/patacTest/test.jpg”,则在stylesheet编辑框中添加如下一行border-image: url(:/patacTest/test.jpg);这样就给widg原创 2017-02-24 13:57:37 · 3903 阅读 · 1 评论 -
qt响应键盘事件
Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效。下面关注点在按键特有的部分:focus一个拥有焦点(focus)的QWidget才可以接受键盘事件。有输入焦点的窗口是活动窗口或活动窗口子窗口或子子窗口等。焦点移动的方式有以下几种:按下Tab或Shift+Tab注意:文本编译器(一般需要插入Tab),或者WebView(需要Tab来移原创 2017-02-24 14:07:34 · 24988 阅读 · 4 评论 -
Qt ScrollArea不出现滚动条及滚动条失效的解决办法以及所有控件保持最小尺寸而不再缩小的方法
设置ScrollArea控件的minimumSize属性,当ScrollArea尺寸缩小到这个尺寸时,将会自动出现滚动条。其次要使滚动条生效,还得确保部件所放置的Widget被设置成了ScrollArea的Widget(通过ScrollArea的成员函数setWidget()设置),或者将需要放置在ScrollArea里的控件放在了qt designer中ScrollArea自带的QWidget中原创 2017-03-03 16:43:57 · 5854 阅读 · 0 评论 -
重启qt程序的方法
通过在widget中调用qApp-exit()函数传递一个特定的退出码,在main()函数中判断qapplication的返回状态,然后启动程序即可。//mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include #include static const int EXIT_CODE_REBOOT = -1234567原创 2017-02-25 10:36:38 · 3182 阅读 · 0 评论 -
QString转换为const char*(QFileDialog得到的QString文件路径(含中文)转换为fstream可用的const char*文件路径)以及解决Qt中文字符串乱码的一种思路
对于不含中文的文件路径,可用如下代码解决:QString path=QFileDialog::getOpenFileName(this,QObject::tr("set filepath")); char* ch; QByteArray ba =path.toLatin1(); ch=ba.data(); ofstream test; test.open(ch); test原创 2017-03-08 10:57:01 · 2407 阅读 · 1 评论 -
Qt动态分配内存的内存回收规则
在Qt的程序中经常会看到只有new而不delete的情况,其实是因为Qt有一套回收内存的机制,主要的规则如下:1.所有继承自QObject类的类,如果在new的时候指定了父亲,那么它的清理时在父亲被delete的时候delete的,所以如果一个程序中,所有的QObject类都指定了父亲,那么他们是会一级级的在最上面的父亲清理时被清理,而不用自己清理;2.程序通常最上层会有一个根的QOb原创 2017-03-04 23:04:04 · 3307 阅读 · 0 评论 -
telnet登录与退出
首先确保本机和远程主机能ping通。注意虚拟机设置网络连接时应设置为桥接模式和复制物理网路状态(以VMWare WorkStation为例),且虚拟机设好静态IP。登录telnet:使用命令telnet后面接要登录的远程主机的ip地址。比如telnet 192.168.1.6就是在本机上登录ip为192.168.1.6的远程主机。接下来会让你输入远程主机的用户和密码,输入正原创 2017-02-26 16:56:42 · 2260 阅读 · 0 评论 -
STM8S的can波特率设置
1 位时间特性为了掌握如何设置STM32 CAN的波特率,首先我们得先了解一下位时间特性。位时间特性逻辑通过采样来监视串行的CAN总线,并且通过跟帧起始位的边沿进行同步,及通过跟后面的边沿进行重新同步,来调整其采样点。它的操作可以简单解释为,如下所述把名义上的每位的时间分为3段:● 同步段(SYNC_SEG):通常期望位的变化发生在该时间段内。其值固定为1个时间单元(1原创 2017-03-07 21:36:05 · 4256 阅读 · 0 评论 -
Windows枚举搜索远程蓝牙设备
主要使用微软自带的蓝牙API,注意使用的蓝牙适配器应当使用的是微软自带的蓝牙驱动(可以通过设备和打印机界面添加远程蓝牙设备即表示可以使用windows蓝牙api,此时安装的蓝牙设备会在设备管理器中显示为Bluetooth链接上的标准串行 ),否则这些api会不起作用。主要代码如下:#include #include #include #include #include原创 2017-04-07 19:50:48 · 9754 阅读 · 11 评论 -
Qt使用Windows蓝牙API搜索蓝牙设备并建立串口服务的方法
如何使用windows蓝牙api搜索蓝牙设备可参考我的另外一篇文章原创 2017-04-07 20:32:37 · 24649 阅读 · 19 评论 -
将类的成员函数作为回调函数的方法
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员。由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时就会因为原创 2017-03-30 19:37:46 · 7569 阅读 · 2 评论 -
STL的vector的源码实现
如下:// Filename: stl_vector.h /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its docume原创 2017-03-15 11:29:33 · 483 阅读 · 0 评论 -
QWidget不显示的问题
有时候实例化了一个继承自QWidget的对象,调用show()函数,发现这个Widget并没有显示,这是为什么呢?其中一种可能就是,这个Widget指定了一个父Widget,且这个父Widget应用了layout,这会导致这个子Widget不显示。如果不指定Widget的父Widget,则可以发现这个Widget可以显示了。原创 2017-03-24 18:58:03 · 11445 阅读 · 3 评论 -
windows VC USB开发相关的api说明
1、头文件包含,库文件链接 在VC中开发HID应用程序时,需要包含setupapi.h和hidsdi.h,包含方式必须为extern "C",如下所示:extern "C" {// Declare the C libraries used#include "setupapi.h" // Must link in setupapi.lib#include "hidsdi.h原创 2017-04-01 11:35:35 · 6303 阅读 · 0 评论 -
将一帧1280x1024图像保存到我的SD卡当中的方法
在以前的项目中有一个开门影像功能,即开门时拍照把开门者记录下来。在这开发过程中遇到了不少问题。1、怎么将一帧1280x1024图像保存到我的SD卡当中?那么我们需要一个buffer进行缓冲。这个Buffer需要多大1280x1024x2(RGB565格式)== 2 621 440Bit == 2.5M字节。大于板载2M SRAM ,资源不满足,只能降低图像尺寸了,最后选择了1024x原创 2017-04-18 19:40:27 · 1273 阅读 · 0 评论 -
QList的一些用法
QList是一种表示链表的模板类。QList是Qt的一种泛型容器类。它以链表方式存储一组值,并能对这组数据进行快速索引,还提供了快速插入和删除等操作。QList、QLinkedList和QVector提供的操作极其相似:*对大多数操作来说,我们用QList就可以了。其API是基于索引(index)的,因此用起来比QLinkedList更方便(QLinkedList的API是基于迭代器的原创 2017-04-06 14:58:35 · 17862 阅读 · 1 评论 -
C++静态成员函数访问非静态成员变量的方法
静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员。但我们在一个class中要使用CreateThread,并且需要在这个开启的线程中处理类的非静态成员变量的时候,因为CreateThread需要入口函数的地址,因此要进入类的成员函数时要求这个类成员函数是原创 2017-04-06 13:36:52 · 7400 阅读 · 0 评论 -
CreateThread的用法及在Qt等GUI开发中使用CreateThread的一些技巧
Qt中有自己的多线程工具QThread,但是每次都需要继承QThread实现一个自己的类,然后重载其中的run()成员函数,工作量比较大。有的时候只需要执行一个运行时间长的函数来更新GUI及后台的一些数据,如果直接写在GUI更新所在的主线程中,就会容易导致线程假死。因此,对于运行时间比较长的代码,我们需要创建新的线程来执行它们。使用QThread是一种方法,另外一种,对于Windows平台下的开发原创 2017-04-06 15:14:34 · 5352 阅读 · 4 评论 -
C++中关于Windows窗口句柄的相关接口
AfxGetMainWnd AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。 函数原型:HWND GetTopWindow(HWND hWnd); 参数:原创 2017-04-15 13:30:05 · 2011 阅读 · 0 评论 -
Linux下OpenCV打开USB接口的UVC摄像头的方法以及索引号为什么要是202的原因
一般来说,USB的UVC摄像头在LINUX平台下通过V4L驱动来使用。OpenCV打开USB的UVC摄像头一般也通过V4L驱动来打开。打开方法网上都有,一般就是通过VideoCapture的open(int index)函数来打开,其中index设为202。如下:VideoCapture cap;Mat frame;if(!cap.open(202)) cout<<"camera原创 2017-06-19 13:27:46 · 9643 阅读 · 0 评论 -
Linux下opencv通过V4L获取摄像头图像的底层源码icvRetrieveFrameCAM_V4L
以下是icvRetrieveFrameCAM_V4L(CvCaptureCAM_V4L* capture,int)的源码,在Opencv3.1.0源码中cap_v4l.cpp中第1438行,被cap_v4l.cpp中第1794行retrieveFrame(int)调用,retrieveFrame(int)被cap.cpp第100行cvRetrieveFrame( CvCapture* captur原创 2017-06-20 11:39:21 · 3754 阅读 · 0 评论 -
opencv中霍夫变换cv::HoughLinesP函数的使用方法和形参说明
HoughLinesP参数分析void HoughLinesP(InputArray image,OutputArray lines, double rho, double theta, int threshold, double minLineLength=0,double maxLineGap=0 )image为输入图像,要求是单通道,8位图像lines为输出参数,原创 2017-06-20 21:00:31 · 4861 阅读 · 0 评论 -
Linux(V4L2驱动)下获得Opencv摄像头属性(图像输出格式和是否发生往RGB的转换)的方法
Opencv可通过cvGetCaptureProperty函数(或者VideoCapture::get(int proID))来获取摄像头输出图像的属性。但返回的是个double的值,如何查看图像输出的编码格式呢?其实可以看到,编码格式是个宏定义,只要有了编码格式的宏定义,我们就可以把得到的doule类型的值和各种编码格式宏对比,即可得知获得的double值是哪种编码格式。V4L2各种编码原创 2017-06-21 22:36:23 · 3869 阅读 · 0 评论 -
Linux CAN说明文档
文档原名称:can.txt,位于 linux-3.2.0-m3352/Documentation/networking/can.txt。CAN 控制器局域网络协议族之 Readme 文件(aka Socket CAN)。另外在该文档的后边附加一个CAN收发测试程序,用于与下位机通信。目录1 概述 / 什么是 Socket CAN?2 目的 / 为什么要使用 socket API?原创 2017-06-10 20:12:42 · 3766 阅读 · 0 评论 -
QT和MFC面试题
1、QT信号槽机制的优缺点 1)QT信号槽机制的引用精简了程序员的代码量 2)QT的信号可以对应多个槽(但他们的调用顺序随机),也可以多个槽映射一个信号 3)QT的信号槽的建立和解除绑定十分自由 4)信号槽同真正的回调函数比起来时间的耗损还是很大的,所有在嵌入式实时系统中应当慎用 5)信号槽的参数限定很多例如不能携带模板类参数,不能出现宏定义等等2、(1) 描述过程,原创 2017-06-12 16:41:14 · 3711 阅读 · 0 评论 -
HoughLinesP( )函数详解
此函数在HoughLines的基础上末尾加了一个代表Probabilistic(概率)的P,表明它可以采用累计概率霍夫变换(PPHT)来找出二值图像中的直线。void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLineLength=0,原创 2017-07-04 22:42:07 · 24725 阅读 · 2 评论 -
highgui标题乱码
根据网上经验,在配置opencv环境时,大多数人会在Property manager(VS2010)中配置debug和release,这样子新建工程就不用繁琐的加入库文件了,但是这种方法添加库文件debug和release是相同的(实际debug和release不同,release下每个库文件最后都有个d),因此highgui会出现乱码。解决办法是不要在Property manager中配置,新建原创 2017-06-13 21:26:15 · 329 阅读 · 0 评论