- 博客(47)
- 资源 (26)
- 收藏
- 关注
转载 科学计数法详解
简介科学记数法是以简洁的方式书写冗长数字的有用速记法。虽然科学记数法一开始可能看起来很陌生,但了解科学记数法将帮助您了解浮点数的工作原理。科学计数法中的数字采用以下形式:有效数 x 10指数。例如,在科学记数法1.2 x 10⁴中,1.2是有效数,4是指数。由于 10⁴ 的计算结果为 10,000,因此 1.2 x 104 的计算结果为 12,000。按照惯例,科学记数法中的数字写在小数点前一位,其余位在小数点后。考虑地球的质量。在十进制表示法中,我们将其写为59736000000000
2022-04-11 10:10:12
15479
转载 条款12:复制对象时勿忘其每一部分
对于一个类,如果你自己定义了构造函数和复制控制函数,那么编译器就不会生成默认的构造函数和复制控制函数,而且假设你的复制控制函数漏掉了某个成员,那么编译器也不会提醒这个错误:class Date{public: Date(int d = 1,int m = 1,int w = 1):day(d),month(m),weekday(w){cout<<"基类构造函数"<<endl;} Date(const Date&); Date& ope...
2022-03-15 16:41:26
258
原创 条款11:在operator= 中处理“自我赋值”
自我赋值发生在对象被赋值给自己class Test{}Test t;t = t;虽然自我赋值是合理的,但是自我赋值有时依然会出现问题class Test{...};class Run{ Run& operator=(const Run& run){ delete t; t = new Test(*run.t); return *this; }private: Test* t;};上述代码问题
2022-03-15 11:16:25
354
原创 条款10:令operator= 返回一个reference to *this
* 只有return *this才能实现连续赋值。赋值的黑科技写法(赋值采用右结合律):int x,y,z;x = y = z = 4;如何实现上述的连续赋值?class Add{public: ... Add& operator= (const Add& add) { ... return *this; //传入的实参为等号右侧的值,返回的刚好是左侧的引用。 }};...
2022-03-15 10:59:59
167
原创 条款9:绝不在构造和析构过程中调用virtual函数
* 在构造和析构期间不要调用virtual函数,因为这类调用从不下降至派生类。//看下述代码需要明白一个概念:基类构造期间的virtual函数不会下降到派生类层。//也就是说基类构造期间logTransaction()还不是虚函数。class Transaction{public: Transaction(){ ... fun(); } virtual void fun() const { ... }..
2022-03-14 17:08:30
596
原创 条款8:别让异常逃离析构函数
* 析构函数绝对不要吐出异常。* 如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后结束程序。* 如果客户要对某个操作函数运行期间抛出的异常做出响应,那么class应该提供一个普通函数执行该操作而不是在析构函数中进行。...
2022-03-14 15:58:36
205
原创 条款7:为多态基类声明virtual析构函数
* 如果这这个基类在派生过程中要实现多态,那么就需要把它的析构函数设为virtual;如果这个类并不是用作基类或者并不是实现多态,那么就不要设为virtual。class A{...};class B:public A{...};第一种情况:如果析构函数不是虚函数的话,A *p = new B();delete p;对象p的内存片段会被解释成A对象,因为对于这个内存只知道是用A的指针指向的(静态绑定),也就是base对象,调用父类的析构函数,析构了base的部分,而没调用到派生类的析构函数,于是这
2022-03-14 15:44:11
234
原创 条款6:若不想使用编译器自动生成函数,就该明确拒绝
* 如果不想使用某个可能默认产生的函数,那么就应该显示的阻止它。可以通过把它声明为private或者通过一个特殊的基类继承下来。编译器会默默的为你生成构造函数,赋值构造函数,复制构造函数和析构函数。这条大家应该根据条款5知道了,如果我们不想让编译器自动生成,应该怎么样做?方法1(直接法):将不想编译器自动生成的函数的声明放到private,并不去定义它们。因为在private里,所以用户没发直接使用(对该类的对象进行赋值和拷贝操作);因为没有定义,所以类的public成员函数、类的友元触
2022-03-14 15:07:25
595
原创 条款5:了解C++默默编写并调用哪些函数
* 如果没有定义构造函数,复制构造函数,赋值构造函数,析构函数,编译器帮你定义,并把这些函数是为public。如果某些数据成员无法进行赋值,那么就不会定义赋值构造函数。这些函数包括:默认构造函数,复制构造函数,赋值构造函数,以及析构函数。这些函数都属于public部分。在有些情况下,赋值构造函数时没有意义的,此时编译器就会拒绝构造一个这样的函数,举一个例子:template <typename T>class Test{public: Test(const Type v...
2022-03-14 14:17:51
655
转载 条款4:确定对象被使用前已经被初始化
* 为内置型对象进行手工初始化,因为C++不保证初始化它们;* 构造函数最好使用成员初始化列表(实际初始化顺序不与列表的排列顺序有关,只取决于类中的声明顺序),而不要在构造函数体内使用赋值操作;* 未避免“跨编译单元的初始化次序”问题,请用local static代替non-local static对象。1. 内置类型C++中的内置基本类型,比如int,double,float等,初值都是垃圾值,即声明int i,i的初值是一个垃圾值。本书建议的最佳处理方法是:永远在使用对象之前将之..
2022-03-08 09:26:46
467
原创 工厂方法模式
一、概念与简单工厂模式比较,多了一层对工厂类的抽象。工厂方法模式是把简单工厂的内部逻辑判断移动到客户端代码,原本对工厂类的修改变成了对客户端的修改。二、应用场景像玩具工厂类接收玩具名称参数后动态创建该玩具类。计算器的算术工厂类接收具体的运算符类型后,创建该算术类。三、优缺点优点:完全符合开放-封闭原则,降低简单工厂模式的耦合性。缺点:每创建一个产品都要同时创建一个对应的工厂类。四、如何写一个工厂方法模式类1、创建抽象玩具类// 玩具接口class Toy.
2022-03-07 17:53:24
261
原创 简单工厂模式-SimpleFactory
一、概念创建型模式,一个工厂类根据传入的类型参数,动态创建该产品类。二、应用场景像玩具工厂类接收玩具名称参数后动态创建该玩具类。计算器的算术工厂类接收具体的运算符类型后,创建该算术类。三、优缺点优点:客户端无需关心具体产品如何创建与组织,仅需知道具体产品所对应的参数即可。缺点:工厂类一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂(成百上千个产品的创建都在这里,代码庞大等等)。四、如何写一个简单工厂类1、创建抽象玩具类#ifnde
2022-03-07 17:16:27
199
原创 条款3:尽可能的使用const
* 将某些东西声明为const可帮助编译器侦测出错误的用法。* 假如当const和non-const成员函数有着相同的用法时,non-const的成员函数调用const版本可以避免代码重复const出现在*左侧,表示被指物是常量;出现在*右侧,表示指针是常量。也可能同时出现在*两侧。被指物是常量时,const写在类型的前后都是可以的const int * num1 = 3;int const * num2 = 3;如果两个成员函数如果只是常量性不同,可以被重载class C..
2022-03-07 10:43:37
270
原创 条款2:尽量以const、enum、inline替换 #define
* 对于单纯常量,最好以const对象或enum 替换#define* 对于形似函数的宏,最好改用inline函数替换#define常量替换宏定义当定义 #define ASPECT_RATIO 1.653时,ASPECT_RATIO 在编译器处理之前就已经被1.653替换了。1、预处理器将代码中所有的ASPECT_RATIO都替换成了1.653.(出现多份占资源)当你认为的ASPECT_RATIO 在程序运行过程中出问题调试的时候,2、最终只会找到1.653 而不是ASPECT_RATIO。.
2022-03-04 17:01:22
483
原创 单例模式-Singleton
一、概念单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口Instance() 获取到那个唯一实例。二、使用场景当代码中需要唯一一个实例存在的类的全局变量的时候才使用单例,比如管理器之类的。三、如何才能写一个单例static 保证只有一个实例; 构造函数的访问方式设为private 避免用户自己实例化类; Singleton(Singleton&)=delete禁止拷贝; Singleton&am...
2022-03-04 14:06:56
365
原创 VTK错误解决合集(持续更新中......)
1.VTK6.0后出现初始化模块的问题。而且报错的地方也是非常的集中,主要在vtkRenderWindow类的显示窗口;窗口显示不出来;Link to vtkInteractionStyle for default style selection等等解决:添加相应的宏,对VTK模块初始化。#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);VTK_MODULE_INIT(vtkInteractionStyle);
2022-03-03 23:20:12
2088
4
原创 VTK学习资料合集(持续更新中......)
一、官方相关1.VTK GITHUB下载地址2.VTK官网3.VTK官方文档 4.VTK官方示例二、VTK相关博客 1.沈子恒-VTK修炼之道以及其他相关博客 2.挥剑段天涯-VTK实战 3.风烟倦-vtk相关三、VTK相关书籍四、VTK下载、安装、编译.........
2022-03-02 17:44:27
7224
转载 GIT使用log命令显示中文乱码
问题:之前代码提交后,有中文备注,但是在使用gitlog查看代码历史记录的时候发现显示乱码,如下:后查询相关资料,现将解决办法总结如下:1、运行GitBash窗口,在该窗口导航条(即最上面)右键,选择Options−>Text,找到下面两处 Locale:选择 zh_CN Charectorset:选择 UTF-8如下图:然后保存。2、到Git Bash命令窗口输入如下设置命令语句git config --global i18n.commite...
2021-09-18 10:32:52
859
原创 QLayout增加控件、删除控件
1.在布局中增加控件:Layout->addWidget(widget);2.在布局中清除控件:widget->setParent(nullptr); //记得移除前将widget的parent置空,不然删不掉Layout->removeWidget(widget);delete widget; //移除并释放...
2021-09-01 15:21:37
1906
原创 breakpad下载-编译-常见问题
一、概述breakpad是google开源的一套用于进程crash的处理方案,跨平台。但由于现在有沙盒技术,会导致breakpad无法生成dump,所以google又开发了一个crashpad项目,用来替代breakpad。二、直接编译不想自己弄这些的可以下载直接可以编译的源码:三、体验流程1、源码下载(能访问googlesource访问googlesource,不能的github上找吧) breakpad (crash库源码): https://github.com/goog...
2021-08-26 13:56:32
1255
原创 4.显示器多屏问题
使用 QDesktopWidgetQDesktopWidget* desktopWidget = QApplication::desktop();//获取当前系统所有的屏幕个数,默认主屏的索引为 0int screenNum = desktopWidget->numScreens();//根据屏幕索引号获取屏幕位置QRect rect = desktop->screenGeometry(index);//在窗口显示之前或者其构造函数之前调用setGeometry设置其位
2021-08-10 17:43:37
265
原创 QTableView单元格双击进入编辑状态让原有内容处于选中状态
使用QTableView单元格编辑功能时,遇到了以下问题:双击可编辑,但单元格内容置空,未修改退出编辑状态,内容变为0。应该这样修改,即可双击单元格进入编辑状态,内容处于被选中状态,QVariant dataModel::data(const QModelIndex &index, int role) const{ if (!index.isValid()) return QVariant(); if (role == Qt::TextAlign
2021-08-10 09:54:18
5057
1
原创 QTableView设置dataModel和sortModel索引问题
对tableview设置数据模型后,有时需要对数据模型里的数据进行排序、过滤显示之类的,这时需要把数据模型设置为排序模型的源如下:ui->tableView->setModel(sortModel);sortModel->setSourceModel(dataModel);这时会出现一个问题是如何根据sortModel显示的索引找到dataModel中的索引等等一系列这方面问题可以从QSortFilterProxyModel的以下几个函数入手:virtual QM..
2021-08-06 14:38:14
440
原创 QTableView+ QAbstractTableModel 拖拽行列单元格
因为用的是mvc,也不需要设置拖动样式之类的,所以这里不用重写drop的4大操作, 即enter leave move drop。以下内容来自龚建波大佬的测试案例。QTableView* tableview = new QTableView(this);//一、tableview拖动设置(默认拖动单元格)tableview->setDragEnabled(true);tableview->setSelectionMode(QAbstractItemView::SingleSelec
2021-08-06 14:15:20
2159
2
原创 3.无边框下最大、最小化等出现界面冻结
void MainWidget::showEvent(QShowEvent *event){ //解决自定义标题栏,恢复最小化时出现界面冻结问题 this->setAttribute(Qt::WA_Mapped); QWidget::showEvent(event);}
2021-08-02 10:37:32
240
原创 2.启动动画
QApplication a(argc, argv);//......//多屏情况下选择主屏QDesktopWidget* desktop = QApplication::desktop();QRect curScreenRect = desktop->screenGeometry(0);//启动动画(适当调整)QPixmap pixmap(PROGRAM_START_ANIMATION);QSplashScreen splash(pixmap.scaled(curScreenRec.
2021-07-30 10:40:54
243
原创 1. 程序启动一次、开机启动
int main(){ //......... QSystemSemaphore sema("JAMKey",1,QSystemSemaphore::Open); sema.acquire();// 在临界区操作共享内存 SharedMemory QSharedMemory mem("SystemObject");// 全局对象名 if (!mem.create(1))// 如果全局对象以存在则退出 { QMessageBox::in.
2021-07-23 18:03:48
159
原创 1.C++ STL-概述
STL主要包含容器、算法和迭代器三大部分。STL容器包含了大多数数据结构,如【数组】、【链表】、【队列】、【堆】、【栈】和【树】等。STL算法包含了诸如增、删、改、查和排序等系统函数。STL迭代器类似指针,通过有序移动把容器中的元素与算法关联起来,是实现STL功能的基础所在。STL的命名空间空间是 std,必须包含 using namespace std; 功能 包含头文件 说明 迭代器 #i
2021-07-23 17:57:01
138
转载 C++11-decltype(网络整理)
decltype简介编译时类型推导的出现正是为了泛型编程,在非泛型编程中,我们的类型都是确定的,根本不需要再进行推导。而编译时类型推导,除了我们说过的auto关键字,还有本文的decltype。decltype与auto关键字一样,用于进行编译时类型推导,不过它与auto还是有一些区别的。decltype的类型推导并不是像auto一样是从变量声明的初始化表达式获得变量的类型,而是总是以一个普通表达式作为参数,返回该表达式的类型,而且decltype并不会对表达式进行求值。decltype用法
2021-07-15 17:22:19
213
原创 C++11 auto详解(网络整理)
/* * 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量。 * C++11中,auto有了全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型 * 指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。 * * 通俗地讲,auto关键字是可以自动推导变量类型的。 * * 需要注意的是,auto不是一个类型的“声明”,而是一个“占位符”, * 编译器在编译期会将auto替换为变量实际的类型。使用auto定义变量时必须.
2021-07-14 18:15:16
951
1
原创 NSIS打包
1、安装完毕,打开NIS Edit,点击文件,选择新建脚本向导2、填写应该写的,没有可以为空3、设置安装语言为“simple chinese”(简体中文),设置安装程序图标(xxx.ico),其余默认即可4、填写应用程序安装的默认路径,没有授权文件的话置空,有的话百度5、如图所示接上一步,点击树形目录,这里选择要发布的exe程序所在的目录,并选中"包含子目录"以及"单独添加每个文件" ,其余默认6、默认即可,具体要求自行百度7、可保留默认设置(当然
2020-10-22 13:29:10
1486
转载 编译: vs2019( cmake-3.15.0-win64-x64 ) + fltk1.3.5 + gmsh-4.6.0
gmsh的gui是用fltk写的,qt部分只有一个简单的显示和没有一样,想用qt的就不用找了,只能自己写。第一步编译fltk1.3.5先下载fltk,解压,新建目录build,打开cmake,进行如下配置,配置好source code和build 目录,点击configure,修改CMAKE_INSTALL_PREFIX,然后点击generate,然后点击open project,如果你是初次使用cmake,选择你想使用的编译器即可。再vs2019内打开该项目后,点击本地调试器,所有项目生成成功后
2020-09-08 13:42:52
1944
6
原创 qdockwidget 显示问题,图标问题,标题栏问题,拖动、分隔线问题
总之这个东西也是真的恶心。1.图标是系统图标不能换颜色,只能在qss里设置。QDockWidget { border: 1px solid lightgray; titlebar-close-icon: url(close.png); titlebar-normal-icon: url(undock.png); } QDockWidget::title { text-align: left; /* align the text to t
2020-07-15 15:31:34
5717
原创 QT信号槽未能触发的问题
记录以下六点:1)槽函数未声明为 slots 类型, 信号函数未声明为 signals所致。(QT5新语法不用考虑这点)2)槽函数和信号函数的参数不一致。3)某事件循环被阻塞导致信号未能发出。4) ui存在的情况下,使用代码添加按钮槽(on_控件objName_clicked())而不是在界面上右键按钮转到槽。 (若是代码添加按钮槽,需要增加自动关联。)5)注意con...
2019-11-25 15:07:06
5689
2
原创 QJson-趟过的各种坑(先坑后用法)
一、不能处理大数据量,如果你的数据量有百兆左右(特别是有的小伙伴还喜欢json格式化输出的),不要用Qjson,否则会报错 DocumentTooLarge解决办法: 用rapidjson(后面介绍)。二、QJson的数据类型只有double,这会导致我们生成json数据的时候会出现精度不够的情况。解决办法:1. 这你的类型可以是string,像这种"123.1234567...
2019-03-28 13:56:58
10815
3
原创 Qt 之字体设置(QFont)详解
简述QFont字体设置无非就是设置下面一些参数: QFont常用属性 函数 描述 setFamily 设置字体 setPixelSize 设置字体像素大小 setBold 字体加粗 setI...
2019-03-28 12:39:50
61142
原创 Qt 之定时器(QTimer)详解
Qt 之定时器(QTimer)详解简述QTimer类提供了定时器信号和单触发定时器。它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。注意当QTimer的父对象被销毁时,它也会被自动销毁。代码测试(内有详细注...
2019-03-27 16:43:13
9151
原创 python 自动识别读取的文件编码
废话不说,直接上代码!import chardet #需要下载该模块def readFile(file_path): with open(file_path, 'rb') as f: cur_encoding = chardet.detect(f.read())['encoding'] print (cur_encoding) #当前文件编码 ...
2019-03-08 18:42:43
6090
4
原创 python utc时间戳转换 (解决1970之前的问题)
mmp,找个1970年之前的转换一百度全是复制粘贴的1970年之后的 这些人复制来复制去真是烦,算了还是自己写吧。1970年之后的标准转换#1.时间19691231curTime = datetime.strptime(str(19691231),'%Y%m%d') #先把时间转为标准的 日期格式(datetime)strTime = curTime.strftime...
2019-03-08 18:33:28
5346
1
concrt140.dll、msvcp140.dll、msvcp140_1.dll、msvcp140_2.dll、vcruntime140.dll vcrunt
2020-09-09
基于STM32的智能四驱小车循迹,避障,红外遥控
2018-01-19
大数据隐私保护(资源集合)
2017-12-31
网上书店集合共三个项目
2017-06-07
毕设-人脸识别技术附带源码
2017-06-03
24小时学通QT编程
2017-06-03
毕业设计-QT-音乐播放器
2017-06-03
微信小程序开发工具
2017-06-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人