自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 Qt:利用qApp进行插件化模块通信

由于QCoreApplication全局单例,因此可以利用其作为媒介进行模块间通信。#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))例如现在有一个主框架Main,包含了两个界面Widget,现在需要当点击WidgetA中的某个控件时,框架会切换到widgetB界面且进行相关操作。1.WidgetA利用setProperty设置相关要传输的数据,并调用sendEvent发送事件。 int

2021-10-13 16:08:48 898 1

原创 Qt:多个信号连接同一个槽函数,获取信号发送对象

使用sender()获取信号发出对象,再用对象名判断对象,做相应处理 QObject* lSender = sender(); if (lSender == 0) return; if (lSender->objectName() == "str1") {} else if (lSender->objectName() == "str2") {} else if (lSender->objectName() == "str3") {}...

2021-10-08 11:23:41 755

原创 Clipper:布尔运算类型

一.ClipperClipper支持四种裁剪类型,分别是交集、并集、非/差和异或。enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; 假如现在把布尔操作比作弄饺子皮,一整大块面皮就是主体多边形,而一个小杯子就是裁剪多边形:1.交集intersection当我们用杯子压在面皮上用力往下压,就相当于把面皮裁剪了,得到的一小块杯口形状的面皮(裁剪结果),就相当于intersection的结果,即两多边形的共同区域。2.并集

2021-08-30 16:40:54 1280

原创 opencascade:布尔操作后的缝合线消除

opencascade中,我们可以运用BRepAlgo_Fuse来进行两个几何模型的融合操作。但实际使用时,比如下面例子中,先在大长方体上面挖一个小长方体,然后再将小长方体直接通过BRepAlgo_Fuse重新融合回去:从上图可以发现,融合之后,虽然原来的槽被填补了,可是出现了缝合线。为了消除缝合线,我们需要用到工具类ShapeUpgrade_UnifySameDomain,该工具用于统一一个几何模型上的面和边。应该可以理解为,同一模型,同一面上的边,统一用边界的边来表示,其余的去掉。 TopoD

2021-08-18 14:06:12 1239

原创 opencascade:修改Dimension标注的样式

在使用opencascade中的标注类AIS_Dimension时,想着修改标注的颜色,文字的样式大小等,一开始使用的是其基类AIS_InteractiveObject中的SetColor,但是发现没有作用。 Handle(AIS_DiameterDimension) DiameterDimension = new AIS_DiameterDimension(coneButtom); DiameterDimension->SetColor(Quantity_NOC_BLUE1);正确的做法需要

2021-08-17 19:52:49 1093

原创 解决:应用程序无法正常启动0xc000007b

当我们都链接好相应的dll时候,却还是无法打开应用,并爆出了这样的错误。原因可能是库的版本问题。这里推荐一个小工具depends,它可以查找一个应用依赖的所有dll,并提供相应信息。查找发现,原来是这几个库拷错了,应用是x64,但是库的版本确实x86。重新拷贝正确的库便可解决上述问题。...

2021-07-23 18:28:02 174

原创 Qt:QPluginLoader与插件式开发

一个工程中,不同的界面就可能由不同的模块进行管理开发,然后生成相应的dll。一般状况下,直接加载.dll创建对象的话,当这个.dll丢失的时候,程序就会直接报错,无法运行下去。但当我们利用插件式开发,结合QPluginLoader,就可以做到即使.dll丢失,主程序也不会崩溃,只会丢失相应的功能。1.首先自定义插件抽象基类函数根据需要自行添加。class IPlugin : public QObject{public: virtual ~IPlugin() {}public: virtu

2021-07-19 18:54:52 1196

原创 未加载Qt5Core.pdb

发布版本的时候,使用了windeployqt来生成相应的库,但是不小心直接在C:\Qt\Qt5.13.2\5.13.2\msvc2017_64\bin中生成了,覆盖掉了Qt5Core.dll,导致出现无法调试的结果。

2021-07-18 21:28:43 2434 5

原创 Qt:关于QAxWidget的使用注意

1.QtDesigner中,提供了接口,可自定义插件,需继承这个抽象类QDesignerCustomWidgetInterface,实现相应的接口。{public: virtual ~QDesignerCustomWidgetInterface() {} virtual QString name() const = 0; //名字virtual QString group() const = 0; //即在哪个组显示virtual QString toolTip() const

2021-07-17 22:28:36 3418 1

原创 C++:关于匿名函数

1.匿名函数的作用相较于普通非匿名函数,匿名函数无需进行另外的声明和定义,仅当调用该匿名时,函数体才会创建,且调用完毕后会立即释放资源。因此匿名函数会更加节省空间,常用于像std::sort这样可以重写排序方式的函数。2.匿名函数的例子 //例子1: auto testReturn = [](int a1, int a2) {return a1>a2 }; bool flag = testReturn(23, 21); cout<<flag<<endl; //例

2021-07-14 08:28:02 940

原创 vs:关于工程链接中的“引用”

vs中,除了在属性->链接器中添加附加依赖项来链接dll之外,还可以直接在工程的引用中添加相应的工程,vs会自行加载。在这里勾选需要用到的,其他项目生成的库。

2021-06-16 16:50:08 204

原创 Qt5Widgetsd.dll和Qt5Widgets.dll区别

Qt5Widgetsd.dll是Debug版本所使用的库,而Qt5Widgets.dll是Release版本的库。Debug一般是公司内部调试所用,版本的发行一般是Release版本,所以不要发错了,不然就会出现找不到相应dll的错误。

2021-06-10 10:30:17 2019

原创 Qt:QXmlStreamReader,QXmlStreamWriter读写xml文件

1.读xml QFile file(QCoreApplication::applicationDirPath() + "/config/Setting.xml"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QXmlStreamReader reader(&file); QString name = ""; int col = 0; bool select = false; while (!reader.

2021-06-09 15:05:56 664

原创 Qt:获取CPU序号,硬盘序号

读取CPU序号及硬盘序号等需要用到QProcess。 p.start("wmic CPU get ProcessorID"); //获取cpu序号 p.waitForStarted(); p.waitForFinished(); CpuId = QString::fromLocal8Bit(p.readAllStandardOutput()); CpuId = CpuId.remove("ProcessorId").trimmed(); //除去前缀 p.start("wmic diskd

2021-06-09 14:52:32 1497

原创 Qt:操作系统注册表

Qt中的QSettings类用于处理对系统注册表的操作。1.写入QString WTime,WKey,WVersion;QSettings setting("HKEY_CURRENT_USER\\SOFTWARE\\Test", QSettings::NativeFormat); //打开注册表setting.setValue("time", WTime);setting.setValue("password", WKey);setting.setValue("version", WVersio

2021-06-09 14:43:33 3118 1

原创 error: ‘>>‘ should be ‘> >‘ within a nested template argument list

在镶嵌模板中,后一个>需要一个空格隔开vector<vector<Pair>> coutours;//修改成如下即可vector<vector<Pair> > coutours;

2021-03-12 15:08:53 287

原创 关于调用深思API读写加密狗

工作中需要完成一些加密狗的简单功能,现稍作记录。 1.加密狗登录与登出1)登录2)登出2.加密狗信息读取与写入1)读取2)写入1.加密狗登录与登出1)登录2)登出2.加密狗信息读取与写入1)读取2)写入...

2021-02-24 16:21:39 2199 1

原创 Qt:QLibrary简析与使用

2021-02-04 16:27:41 6389 2

原创 vs2015 调试时打开控制台

打开项目属性->通用属性->链接器->系统->子系统,在其中选择即可切换。

2021-02-04 15:49:51 3420

原创 Qt:QApplication浅析

当我们设计Qt界面应用时,不免会对下面代码非常熟悉。QApplication作为整个GUI应用的入口点,想必是完成各种初始化,并开始主循环,各种东西。int main(int argc, char *argv[]){ QApplication a(argc, argv); //...... return a.exec();}无论有多少个windows,一个应用中只会存在一个QApplication对象。若应用无需用QWidget类,则应该用QGuiApplication来

2021-01-29 17:41:40 2713 1

原创 Qt:元对象系统浅析

元对象系统基础功能:(1)信号与槽(2)运行时信息(3)动态属性元对象系统有三个支撑基础:object提供基础类,继承此则可利用元对象系统Q_OBJECT若使用元对象提供的服务,必须在类中包含此宏,编译后会自动生成元对象相应的源文件(moc_xxx.cpp)元对象编译器(moc)会为每个QObject子类提供实现元对象特性所需的代码。(即第二点所述)元对象系统还有以下一些附加特性:(1)[virtual] const QMetaObject *QObject::metaObject()

2021-01-27 16:23:14 206

原创 Qt:使用QUiLoader动态加载.ui

通常我们创建一个.ui文件,通过Qt Designer用拖拽的方式布置界面时,会需要用到uic工具吧.ui文件转化成相应的c++代码。而动态加载.ui文件是在程序运行过程中用 QUiLoader动态加载.ui文件,达到相同目的,而无需通过上述的uic进行转换。其适用于:(1)UI文件是程序运行中途创建生成的,在同程序的其他地方调用,没法进行uic。(2)前端设计和功能实现相分离,前端设计人员和功能实现人员只要事前沟通好相关组件的名称等,就可以进行独立开发,能提高效率。需要用到头文件.

2021-01-27 11:03:48 2115 1

原创 Qt:为QLabel增设点击响应操作

QLabel是没有clicked()信号的,所以要创建选中QLabel的响应操作,得做一些处理。1.为目标对象QLabel添加事件过滤器(EventFilter)void QObject::installEventFilter(QObject *filterObj)label->installEventFilter(this);事件过滤器是接收发送到此对象的所有事件的对象。即上述代码中即发送到label的所有事件都会被this表示的对象所接收。筛选器可以停止事件或将其转发到此对象。事件过滤

2021-01-22 18:04:19 1315

原创 Qt:信号与槽机制浅析

总览:1.使用connect时,信号与槽函数的参数应该只声明类型,不可以带有参数名。2.若对同一信号和槽连接两次,则触发的信号会发送两次到槽对象上。3.信号的参数数量必须多于或等于槽的参数数量,因为槽可以忽略信号的参数。4.所有继承QObject的类都可以使用信号与槽机制。5.一个信号可以发送至多个槽,一个槽也可以接受多个信号,一个信号甚至可以连接到另一个信号。6.若连接时使用宏SLOT和SIGNAL,则声明中,信号要放在signals:下面,槽要放在(private、public、protec

2021-01-22 15:25:29 223

原创 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h“”?

当我们创建一个默认的控制台项目时,会发现有stdafx.h等文件会伴随生成,当我们把这些文件删除时,会出现以下错误。问题原因:1、预编译:编译器首先编译某个文件,然后将这个编译结果保存起来,之后如果有其他源文件包含了这个“预编译头文件”的时候,则自动从这个编译结果提取需要的信息进行编译。2、预编译结果文件(Precompiled header file):就是那个用来保存已经编译了的符号信息的文件(.PCH作为后缀)3、生成预编译结果文件(Create Precompiled header fil

2021-01-22 09:53:18 1033

原创 c++使用SQL Server相关配置及密码修改

一.连接配置1.打开SQL Sever 配置管理器2.SQL Sever 配置管理器 -> SQL Server服务 -> 启动SQL Server (MSSQLSERVER)服务3.SQL Server 网络配置—>MSSQLSERVER的协议,启动TCP/IP二.账号密码更改,数据库创建1.打开SQL Server Management Studio2.默认先用Windows身份验证3.右击属性,勾选4.右击“数据库”创建自己的数据库并命名(数据库登录用的数

2021-01-18 10:32:36 356

原创 Visual Studio 2015 dll输出路径配置

1.dll输出路径配置属性 - 常规 - 输出目录2.lib输出路径链接器 - 高级 - 导入库

2021-01-15 16:07:50 514

原创 关于QSqlDatabase::open输入错误ip的阻塞问题

Qt5中的QSqlDatabase可用于连接SqlServer,并通过open来打开数据库(建立连接),但是如果设置的数据库IP地址时传入一个错误的IP地址,open就会一直阻塞不会返回。帮助文档中有关于连接的一些选项,通过QSqlDatabase::setConnectOptions来设置其中上述的SQL_ATTR_LOGIN_TIMEOUT和SQL_ATTR_CONNECTION_TIMEOUT看似是与连接相关的选项。测试发现SQL_ATTR_LOGIN_TIMEOUT单独设置时有效(貌似与版

2021-01-13 18:15:25 1950 9

原创 关于题型:从序列中找出现次数为k的数(待完成)

文章目录1.序列中的数都出现过偶数次,只有一个数出现过偶数次,求此数1.序列中的数都出现过偶数次,只有一个数出现过偶数次,求此数

2021-01-12 15:52:24 203

原创 二叉树相关算法整理(跟新中)

求二叉树的叶子节点数输入1)头结点//递归求叶子节点数int findleafnode(node* head){ if(head==NULL) return 0; if(head->left==NULL&&head->right==NULL) return 1; return findleafnode(head->left)+findleafnode(head->right);}//非递归.

2021-01-12 15:51:44 124

原创 实用数据类型转换

(具体的编码原理暂不考虑)1.汉字或字母数字(数组)转QStringchar buf[128] = {0};strcpy(buf, u8"测试");//需要u8,保证字符串不会乱码QString qstr = QString::fromUtf8(buf);char buf[128] = {0}; strcpy(buf, "abc123");QString qstr = QString::fromUtf8(buf);QString用相应的to来转化为其他类型。2.string,QSt

2021-01-12 15:32:52 160

原创 两time_t相减求时间差

EndDate,StartDate为time_t类型,假设已完成初始化。double dTime = difftime(EndDate,StartDate);//两time_t相减std::string strTime = double2TimeString(dTime);time_t实际上也是整形,相关编码原理参照其他文档。std::string double2TimeString(double dTime){ //dTime为秒数 int iHour = dTime / 60 / 60;

2021-01-12 15:22:07 2679 1

原创 QSqlDatabase使用相关说明

一.描述QSqlDatabase提供了一系列的接口用于访问操作数据库,包括连接数据库,输入sql语句等。QSqlDatabase的实例表示着一个对数据库的连接。该连接通过一个受支持的数据库驱动程序(从QSqlDriver派生)提供对数据库的访问。另外,可以从QSqlDriver子类化自己的数据库驱动程序。(如何创建自己的驱动,详见其他文档)Qt支持的数据库有很多,自己首先接触到的是QODBC(用于sql server)。另外还有QDB2、QIBASE、QMYSQL等。二.具体接口连接到数据库(

2021-01-11 16:24:33 6829

原创 Visual Studio 2015 一些工程配置问题

1.C/C+±常规-附加包含目录点开编辑,里面包含的是一些三方库的include,即相关的头文件,例如项目中要使用Qt库,需要对用到的模块进行相关的配置。2.链接器-常规-附加库目录当使用一些三方库时,我们需要把一些静态库的路径配上去,以便于链接器在链接时找到相应的文件。3.链接器-输入-附加依赖项上述的附加库目录只是查找目录,类似环境变量 PATH;但是具体用哪一个lib时则需要指明,如果不在附加依赖项里填上,就需要在代码里用这样的语句代替。...

2021-01-09 18:25:23 116

原创 Qt:QObject浅析

QObject类是Qt对象模型的核心类,也是所有Qt所有类对象的基类。继承QObject,我们可以使用其相应的功能,包括熟悉的信号与槽机制,接收事件,一些计时器,翻译等。所有QObject会被记录在一个全局的对象树中,当以某个对象作为父对象建立子对象时,该子对象会自动存进父对象的孩子列表中。当父对象析构时,其孩子列表中的子对象也会依次析构。当然子对象也可以单独析构。我们将QObject对象视为ID,即QObject::objectName()是唯一的,所以QObject不允许拷贝构造函数和赋值运算符,

2021-01-09 14:52:08 473

原创 Visual Studio 2015 DLL封装与调试

1. 创建DLL工程创建工程后,可以看到工程中已经自动生成了几个文件:stdafx.htargetver.hdllmain.cppstdafx.cpp这些应该是工程固定创建的文件,接下来看一下文件里面的描述。(里面牵扯的东西太多,下面只是记录一下显而易见的内容)(1) stdafx.hstdafx全称为Standard Application FrameworkExtensions描述讲得很清楚,dll需要用到的头文件,可统一放到这里。(2)targetver.h大致是一些平台

2021-01-09 14:50:24 495

原创 Visual Studio 2015 新添加宏

项目中要到导入Qt库,正常情况下可以通过Qt Vs Tools->change project’s Qtversion来设置路径。但有一个工程无法打开此窗口。这个宏是类似环境变量,比如$(ProjectDir) (SolutionDir),这样的,我需要新添加一个变量宏,但是VS的GUI上貌似找不到新的变量的设置,但是Qt的VS插件可以设置(SolutionDir),这样的,我需要新添加一个变量宏,但是VS的GUI上貌似找不到新的变量的设置,但是Qt的VS插件可以设置(SolutionDir),

2020-12-28 09:48:48 580 2

原创 关于虚拟内存和物理内存的映射和地址转换

· 地址翻译及数据获取页表存储的是虚拟内存和物理内存之间的一种映射关系,而MMU是实现地址翻译的一个模块。CPU通过虚拟地址请求数据且页面命中的过程大致如下:(1)CPU生成一个虚拟地址传递给MMU(2)MMU会根据虚拟地址生成PTE地址,然后到内存中查询PTE(3)内存返回PTE给MMU(4)MMU解析PTE,得到物理地址,传送回内存(5)最后内存将数据传给CPU。上图是较为简单的结构,实际上系统会对PTE条目进行缓存,利用高速缓存区或者TLB。TLB为翻译后备缓存器,包含在MMU中,其

2020-12-01 19:29:30 1543

原创 --排序算法汇总--

文章目录第三梯队1.1 冒泡排序1.2 选择排序1.3 插入排序1.4 鸡尾酒排序第二梯队2.1 希尔排序2.2 快速排序2.3 归并排序2.4 堆排序第一梯队3.1 计数排序3.2 基数排序3.3 桶排序第三梯队1.1 冒泡排序冒泡排序很形象,即让较大元素想泡泡一样不断往上冒,代码如下。void bubblesort1(int *array,int n){ for(int i = 0;i<n;i++) for(int j = 0;j<n-i-1;j++)

2020-11-24 17:07:27 105

原创 高速缓存存储器与其查询操作

高速缓存存储器假设存储器查询地址有m位,那么该存储器会形成M=2^m个地址。相当于一个大数组。假设将存储器空间分为一个个高速缓存组。共S个组。每个组又包含E个高速缓存行,每行由三部分组成,分别是数据块,有效位和标记位。数据块:共B个字节,把块看成数组,每个元素大小为1字节有效位:即标记该行是否包含有意义的信息,可以理解为是否缓存了东西标记位:唯一标识存储在这个高速缓存行中的块,即标记为的数值不同,数据块中的块是不一样的。以下是CPU为查询数据发送给高速缓存器的地址格式。其中t,s,b都..

2020-11-11 10:03:04 392

空空如也

空空如也

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

TA关注的人

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