03 2018 档案
va_list va_start va_end va_arg 解决变参问题
摘要:解决参数个数不确定的问题。 头文件 #include<stdarg.h> VA_LIST 是在C语言中解决变参问题的一组宏,用于获取不确定个数的参数。 _M_ALPHA是指DEC ALPHA(Alpha AXP)架构。所以一般情况下va_list所定义变量为字符指针。 INTSIZEOF 宏,获取类
阅读全文
Qt QDataTime QString 两个类的使用
摘要:QDateTime now = QDateTime::currentDateTime(); QString nowStr; nowStr = now.toString("yyyyMMdd_hhmmss"); QString fName = QString("debug_%1.log") .arg(no...
阅读全文
Qt中 QString 和int, char等的“相互”转换
摘要:Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: (解释,变量a为int型或者float,double。10和16为进制) toUpper是大写 2.使用 把QString转换为 double类型 方法1. 方法2.很
阅读全文
定时器事件QtimerEvent 随机数 qrand Qtimer定时器
摘要:QTimerEvent类:定时器事件。QObject的子类都可使用 int QObject::startTimer(int interval)【参数:毫秒】【返回值:定时器整型编号】来开启一个定时器。定时器溢出是,触发timerEvent()函数。 QTimer类:定时器。编程中更常用。提供更高层次
阅读全文
获取窗口或者部件的位置
摘要:对于窗口,包含窗口装饰器: x() y() pos() frameGeometry() 几何尺寸(位置+大小) 不包含窗口装饰器: geometry() 几何尺寸(位置+大小) width() height() rect() size() 只包含大小信息 setGeometry() 改变 位置+大小
阅读全文
键盘事件
摘要:实现效果: 1、按下 Ctrl + M 组合键 最大化窗口 ;按下Shift + M 组合键 正常化窗口 ; 按下Alt + M 最小化窗口; 2、窗口上放置一个按钮,实现按下键盘四个方向键,移动按钮。 效果1: 效果2:上、下、左、右,单方向的移动OK的,但是,45°斜着运动,不是很灵。好奇怪
阅读全文
鼠标事件 滚轮事件
摘要:实现的效果: 按下鼠标左键来拖动窗口;双击鼠标左键全屏窗口;按鼠标右键则使指针变为自定义的图片;使用滚轮可以放大或者缩编辑器里面的文本大小。 注意:默认是当按下鼠标按键时移动鼠标,鼠标移动事件才会产生;如果不想按下鼠标,也可以获取鼠标移动事件,那么就在构造函数中添加: setMouseTrackin
阅读全文
Q_UNUSED
摘要:Q_UNUSED() 没有实质性的作用,用来避免编译器警告 void func( int a) { Q_UNUSED(a); //函数体内没有使用a,避免编译器警告 }
阅读全文
QPixmap 显示大小
摘要:size picSize(600,400); //将pixmap缩放成picSize大小然后保存在scaledPixmap中 按比例缩放: QPixmap scaledPixmap = pixmap.scaled(picSize, Qt::KeepAspectRatio); 不按照比例缩放 QPix
阅读全文
事件的传递 键盘事件作为例子
摘要://widget.h #ifndef WIDGET_H #define WIDGET_H #include #include"mylineedit.h" #include namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QW...
阅读全文
qt中添加Q_OBJECT报错的问题
摘要:在qt编写的过程中添加Q_OBJECT后发现老是报错的问题 编译后老是报undefined reference to vtable for “xxx”的错误,后来发现在xxx.pro文件中添加
阅读全文
Q_OBJECT宏的作用
摘要:The Q_OBJECT macro at the beginning of the class definition is necessary for all classes that define signals or slots 只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。 比如编写事件接口等程序时,有时会出现如下问题: 在PC端成功编译,但在开发板端却显示...
阅读全文
C++中的RAII介绍 资源管理
摘要:摘要 RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全、简洁的状态管理,编写出优雅的异常安全的代码。 资源管理 RAII是C++的发明者Bjarne Stroustrup提出的概念,RAII全称是“Resource Acquisition is Initia
阅读全文
C++ explicit关键字详解
摘要:首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们
阅读全文
信号和槽 带不带参数
摘要:信号槽如何传递参数(或带参数的信号槽) 利用Qt进行程序开发时,有时需要信号槽来完成参数传递。带参数的信号槽在使用时,有几点需要注意的地方,下面结合实例进行介绍。 第一点:当信号与槽函数的参数数量相同时,它们参数类型要完全一致。 信号: 槽: 信号槽绑定: 发送信号: 结果: 可以看出,参数已经成功
阅读全文
创建工具条ToolBar
摘要:/***ToolBar***/ QToolBar * tlb_ImageOpen; QToolBar * tlb_VideoOpen; QToolBar * tlb_AudioOpen; void MainWindow::createToolbar() { tlb_ImageOpen = addToolBar(tr("Image")); tlb_Image...
阅读全文
文件打开对话框
摘要:QFileDialog dlg(this); dlg.setWindowTitle(tr("打开图片")); dlg.setWindowIcon(QIcon(":/main/res/图片.png")); dlg.setNameFilter(tr("ALL Image Type files(*.png *.jpg *.bmp *.jpeg *.gif *.psd)"...
阅读全文
C++类型前置声明
摘要:前言 本文总结了c++中前置声明的写法及注意事项,列举了哪些情况可以用前置声明来降低编译依赖。 前置声明的概念 前置声明:(forward declaration), 跟普通的声明一样,就是个声明, 没有定义。之所以叫前置声明,看下面一小段代码: 因为是在使用这个类型Userful之前告诉编译器,“
阅读全文
Qt 引用头文件 QT_BEGIN_NAMESPACE QT_END_NAMESPACE
摘要:Qt里面引入头文件的两种方式: 1、 2、 关于QT_BEGIN_NAMESPACE 和QT_END_NAMESPACE 比较好的解释: 比较好的解释: QT_BEGIN_NAMESPACE其实就是个宏,以前Qt4是没有Qt命名空间的,后来才加上的,编译Qt源码时会有选项,是否将这些类放到专用的Qt
阅读全文
Qt emit的使用
摘要:1. 假设现在我定义了一个类A,现在想在A的一个函数void A::function1()当中的结尾处emit一个信号signal1(),然后利用这个信号触发另一个类B进行某项操作void B::function2(),请问connect应该如何书写呢(尤其是sender和SIGNAL参数)?另外,
阅读全文
特定于类的内存管理---《C++必知必会》 条款36
摘要:我们可以量身定制 operator new 和 operator delete 用于某个类类型,而不是必须使用标准版的 operator new 和 operator delete。 注意:我们不可以对 new 和 delete 操作符做什么,它们的行为是固定的。但是我们可以改变 它们所调用的 op
阅读全文
C++深入理解虚函数
摘要:为什么使用虚函数?什么是虚函数?虚函数是为了解决什么问题? 面向对象的三大特征: 封装 多态 继承 什么是多态? 相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。 静态多态 vs 动态多态 [-:>静态多态也叫做早绑定 如上面的代码,他们函数名相同,参数个数不同,一看就是互为重载的两个
阅读全文
C++ string 类
摘要:标准c++中string类函数介绍注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值
阅读全文
FILE 文件的使用 (VC、BCB、Qt)
摘要:用于输入程序运行过程中的需查看的信息 ; 用于存取固定格式的数据; 用于存取无格式的数据; 适用平台:visual C++6.0 、BCB、QT
阅读全文
placement new--《C++必知必会》 条款35
摘要:placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。 placement new原型为: operator new的原型为: 首先我们区分下几个容易
阅读全文
fatal error C1010: unexpected end of file while looking for precompiled header directive
摘要:在编译VS时候,出现fatal error C1010: unexpected end of file while looking for precompiled head。 问题详细解释:致命错误C1010,在寻找预编译指示头文件时,文件未预期结束。就是没有找到预编译指示信息的头文件。 顾名思义就
阅读全文
禁止或强制使用堆分配---《C++必知必会》 条款34
摘要:有时候,指明一些特定类的对象不应该被分配到堆(heap)上是个好主意。通常这是为了确保该对象的析构函数一定会得到调用。维护对象本身(body object)的引用计数的句柄对象(handle object)就属于这种对象。具有自动存储区的类的局部对象,其析构函数会被自动调用(exit 或abort发
阅读全文
制造抽象基类--《C++必知必会》 条款33
摘要:抽象类,含有纯虚函数的类,不可以创建对象。 然而,有时我们并不需要某个函数定义为纯虚函数,但是任然希望此类像抽象类一样,不可以创建对象。 方法1:通过确保类中不存在共有构造函数来模拟抽象基类的性质。意味着,我们必须至少显示地声明一个构造函数和一个复制构造函数,防止编译器隐式公有的内联的构造函数。声明
阅读全文
禁止复制操作 --《C++必知必会》条款32
摘要:class NoCopy{ private: //声明为私有的,则外部不可访问,即:不可复制 NoCopy(const NoCopy & );//复制构造函数 NoCopy & operator=( const NoCopy &);//复制赋值操作符 };
阅读全文
协变返回类型---《C++必知必会》 条款 31
摘要:一般来说,一个重写的函数与被它重写的函数具有相同的返回类型。 然而,这个规则对于“协变返回类型(covariant return type)“的情形来说有所放松。也就是说,如果B是一个类类型,并且一个基类虚函数返回B*,那么一个重写的派生类函数可以返回D*,其中的D共有派生于B(即D是一个(is a
阅读全文
泰德激光打标软件 包含 #include "Main.h" 时 原本正确的单元却报错
摘要:问题:泰德激光打标软件 ,当新增单元需要包含 #include "Main.h" 时, 原本正确的单元却报错。 办法:包含 #include "Main.h" 时,同时包含 #include "define" Notes:泰德激光切割软件 与此不同,需要 #include "Main.h" 时,只包
阅读全文
VC中加载LIB库文件的三种方法
摘要:VC中加载LIB库文件的三种方法 在VC中加载LIB文件的三种方法如下: 方法1:LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。 方法2
阅读全文
#pragma once
摘要:来自:百度百科 #pragma once #pragma once是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。 #pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过现在大部分编译器都有这个杂
阅读全文
C++中定义NULL的头文件
摘要:NULL不是C语言基本类型,其定义在stddef.h文件中,作为最基本的语言依赖宏存在。但是随着C/C++的发展,很多文件只要涉及了系统或者标准操作都会将NULL作为标准宏声明或者包含。所以几乎包含任意的C++标准头文件都会把这个宏引入。 其定义在cstddef文件中。 其实编译器有内置的NULL类
阅读全文
c++11 类默认函数的控制:"=default" 和 "=delete"函数 void fun() = default; void fun()=delete;
摘要:转自:lsgxeva#define _CRT_SECURE_NO_WARNINGS #include #include #include #include //c++11 类默认函数的控制:"=default" 和 "=delete"函数 /* C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。 这些类的特殊成员函数负责创建、初始化...
阅读全文
make clean 与 make distclean 的区别
摘要:make clean仅仅是清除之前编译的可执行文件及配置文件。 而make distclean要清除所有生成的文件。 Makefile 在符合GNU Makefiel惯例的Makefile中,包含了一些基本的预先定义的操作: make 根据Makefile编译源代码,连接,生成目标文件,可执行文件。
阅读全文
实参相依查找[条款25]----《C++必知必会》
摘要:名字空间对现代C++编程和设计有着深远的影响。其中有些影响直接而明显,例如using声明和using 指令以及采用名字空间作用域加以限定的名字。然而,名字空间还有一些在语法上不那么明显但任然很有基础、很重要的影响。实参相依的查找(Argument Dependent Lookup ADL)就是其中之
阅读全文
成员函数查找[条款24]---《C++必知必会》
摘要:调用一个成员函数,涉及三个步骤:第一步,编译器查找函数的名字;第二部,从可用候选者中选择最佳匹配函数;第三步,检查是否具有访问该函数的权限。 分析: 步骤1:查找函数的名字。因为我们正在调用一个D对象的成员,所以将从D的作用域开始查找并且立即定位到D::f上。 步骤2:从可用的候选者中选择最佳的匹配
阅读全文
C++匿名名字空间
摘要:转自:http://blog.csdn.net/eric_arrow/article/details/8978905 名字空间(namespace),是C++提供的一个解决符合名字冲突的特性。标准规定,在不同名字空间中命名相同的符号,代表不同的实体。通常,利用定义名字空间的办法,可以使模块划分更加方
阅读全文
程序界面多语言切换功能如何实现
摘要:VC++ 通过INI配置文件,实现多国语言切换界面 1、针对界面控件上的字符,为不同语言做一个INI文件,如:Chinese.ini,English.ini 2、新建一个用于初始化界面的函数: void InitLanguage(int nLanguage);//初始化界面语言 void CLang
阅读全文
C 语言中 define 的全部使用方法总结
摘要:http://blog.jobbole.com/108624/ http://blog.chinaunix.net/uid-29067889-id-3819834.html
阅读全文
#if defined(__cplusplus)
摘要:由于C++编译器需要支持函数的重载,会改变函数的名称,因此dll的导出函数通常是标准C定义的。这就使得C和C++的互相调用变得很常见。但是有时可能又会直接用C来调用,不想重新写代码,让标准C编写的dll函数定义在C和C++编译器下都能编译通过,通常会使用以下的格式:(这个格式在很多成熟的代码中很常见
阅读全文
函数对象[条款18]---《C++必知必会》
摘要:有时需要一些行为类似于函数指针的东西,但函数指针显得笨拙、危险而且过时(让我们承认这一点)。通常最佳方式是使用函数对象(function object)取代函数指针。 与智能指针一样,函数对象也是一个普通的类对象。智能指针类型重载 -> 和 * (可能还有 ->* 和 .*)操作符,来模仿指针的行为
阅读全文
C++ error LNK2001
摘要:error LNK2001: unresolved external symbol "public: virtual __thiscall Func:: 错误原因,还是只有声明,没有定义
阅读全文
Cout<<XXX<<<XXX<<<XXX,是从左到右计算的
摘要:int a=1,b=2,c=3; cout<<(c=a+b)<<' '<<(a=b+c)<<' '<<(b=a+c)<<endl; 输出结果:11 7 4
阅读全文
文本文件显示 删除文本文件前n个字符
摘要:#include<iostream>#include<string.h>using namespace std;void displayContent(const char * path){ FILE * fp=fopen(path,"r"); int c; while((c=fgetc(fp))!
阅读全文
处理函数和数组声明[条款17]---《C++必知必会》
摘要:指向函数的指针声明和指向数组的指针声明容易混淆,原因在于函数和数组修饰符的优先级比指针修饰符的优先级高,因此通常需要使用圆括号。 int *f1( );//一个返回值为 int* 的函数 int ( *f2 )( );//一个指针,指向一个返回值为 int 的函数 具有高优先级的数组修饰符存在同样的
阅读全文