6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作



一 
QT的内存管理

1
 QT中的内存管理是QObject来管理的

2
 QT中的内存管理没有cocos2dx中的引用计数


组件可以指定父对象

QTimer *timer = QTimer(this);  
//这里的this实际上强制转换成为了QObject了。


每一个对象都有一个deleteLater()方法,

QLineEdit* edit = new QLineEdit(this);

 

delete edit;  
//这里的delete马上调用析构函数对内存进行释放

Edit->deleteLater();  
deleteLater不是马上释放的,而是发送了一个消息,缓一下,等下一个消息来的时候释放,这种方式是延时释放。

 

二 
QT中制作动态库


新建一个库项目

项目目录结构如下:

编写代码

t14library_global.h

#ifndef T14LIBRARY_GLOBAL_H
#define T14LIBRARY_GLOBAL_H
 
#include <QtCore/qglobal.h>
 
#if defined(T14LIBRARY_LIBRARY)
#  define T14LIBRARYSHARED_EXPORT Q_DECL_EXPORT
#else
#  define T14LIBRARYSHARED_EXPORT Q_DECL_IMPORT
#endif
 
#endif // T14LIBRARY_GLOBAL_H

T14Library.h

#ifndef
T14LIBRARY_H

#define
T14LIBRARY_H

 

#include
"t14library_global.h"

 

/*这里的T14LIBRARYSHARED_EXPORT就是用来做跨平台的一个宏*/

class
T14LIBRARYSHARED_EXPORT
T14Library

{

 

public:

   
T14Library();

 

   
//自己编写的函数

   
void
Encrypt();

};

 

#endif
//
T14LIBRARY_H

T14Library.cpp

#include "T14Library.h"
#include <QDebug>
 
T14Library::T14Library()
{
}
 
void T14Library::Encrypt()
{
    qDebug() << "Encrypt";
}

点击构建按钮:

到项目目录E:\QT\build-T14Library-Desktop_Qt_5_3_MinGW_32bit-Debug\debug下查看:


添加一个空QT项目来使用QT

编写的代码如下:

T15UseLibrary.pro

SOURCES += \
    main.cpp
 
#如果QT mingw版本,使用动态库方式和Linux没区别(-L,-l)
#如果QT VS版本。。。使用动态库方式和windows没区别
#如果QT mingw版本,要调用VC写的动态库,使用一个工具,生成libXXXXXX.文件
# 注意-L后面是dll所在的文件夹路径,-l后面表示的是动态库的名字
LIBS += -LE:\QT\build-T14Library-Desktop_Qt_5_3_MinGW_32bit-Debug\debug -lT14Library

main.cpp

#include <QCoreApplication>
 
#include "../T14Library/T14Library.h"
 
int main(int argc,char *argv[])
{
    QCoreApplication app(argc,argv);
 
    T14Library d;
    d.Encrypt();
 
    app.exec();
}

运行结果:

 

三 
编写一个静态库

创建项目:

一直点击,直到完成。

这里的静态库就如同是一个普通的项目

 

时间: 2024-09-21 14:22:23

6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作的相关文章

c++-VC2013动态库可以调用静态库(.lib)文件吗

问题描述 VC2013动态库可以调用静态库(.lib)文件吗 我创建了一个c++静态库(比如a.lib),然后想引用到另一个项目b中去,这个项目如果设置同样生成静态库,就正常编译后生成b.lib,但是我需要的是动态库(b.dll),然而当我将属性页配置类型改为动态库再编译时提示"error LNK1104:无法打开文件a.lib".难道动态库不能引用静态库文件吗? 解决方案 可以直接引用lib文件,先看你的a.lib路径在工程中是否配置好了 解决方案二: 绝对是可以引用的,找工程配置或

Cocos2d-x开发中C++内存管理

由于开始并没有介绍C++语言C++的内存管理当然也没进行任何的说明为了掌握Cocos2d-x中的内存管理机制是有必要先了解一些C++内存管理的知识.C++内存管理非常复杂如果完全地系统地介绍可能需要一本书的篇幅才能解释清楚.这里只给大家介绍C++内存管理最为基本的用法. 内存分配区域创建对象需要两个步骤第一步为对象分配内存第二步调用构造函数初始化内存.在第一步中对象分配内存时候我们可以选择几个不同的分配区域这几个区域如下栈区域分配.栈内存分配运算内置于处理器的指令集中效率很高但是分配的内存容量有

Open Cascade中的内存管理

Open Cascade中的内存管理 Memory Management in Open Cascade eryar@163.com 一.C++中的内存管理 Memory Management in C++ 1. 引言 为了表现出多态,在C++中就会用到大量的指针和引用.指针所指的对象是从内存空间中借来的,当然要及时归还.特别是指针在程序中随心所欲地创建,因此,一个指针究竟指向哪个对象,一个对象到底被几个指针所指向,是程序员十分关注的事情. C++中涉及到的内存管理问题可以归结为两方面:正确地掌

Linux内核中的内存管理浅谈

 [十月往昔]--Linux内核中的内存管理浅谈 为什么要叫做"十月往昔"呢?是为了纪念我的原博客. 不知道为什么,突然想来一个新的开始--而那个博客存活至今刚好十个月,也有十个月里的文档. 十月往昔,总有一些觉得珍贵的,所以搬迁到这里来. 而这篇文章是在09.04.20-09.04.21里写的. Jason Lee   ------------–cut-line   1.基本框架(此处主要谈页式内存管理) 4G是一个比较敏感的字眼,早些日子,大多数机器(或者说操作系统)支持的内存上限

解析PHP中的内存管理,PHP动态分配和释放内存

本篇文章是对PHP中的内存管理,PHP动态分配和释放内存进行了详细的分析介绍,需要的朋友参考下   摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改.拷贝和移动.而在C语言中,尽管你能够

C++中的内存管理

在C++中也是少不了对内存的管理,在C++中只要有new的地方,在写代码的时候都要想着delete. new分配的时堆内存,在函数结束的时候不会自动释放,如果不delete我分配的堆内存,则会造成内存泄露.所以我们要学会内存管理,不要内存泄露.在C++中的内存管理机制和OC中的还不太一样,在OC中的ARC机制会给程序员的内存管理省不少事,但在C++中没有ARC所以我们要自己管理好自己开辟的内存.Java中也有自己相应的内存管理机制,比如JDBC里的获取的各种资源在finally里进行close等

cocos2d x-cocos2dx-cpp中的内存管理问题

问题描述 cocos2dx-cpp中的内存管理问题 请教一下:在GitHub中的cocos2dx-cpp中的cocos2d-x / tests / cpp-tests / Classes / AccelerometerTest / AccelerometerTest.cpp的代码`AccelerometerTestScene::runThisTest(){auto layer = new AccelerometerTest();addChild(layer);layer->release();/

模拟实现C语言中的内存管理_C 语言

这里模拟了C语言中的内存管理,当我们要创建或者使用一个对象时,那么这个对象会调用retain方法,计数+1,当我们要释放对象,我们会调用free,这里注意要对计数记性判断,如果是0的话,那么就会销毁. #import <Foundation/Foundation.h> int cnt = 0; void fun (charchar * p) { printf("%c\n",p[0]); } charchar * retain1(charchar * p) { //retai

动态库调用静态库示例讲解_Linux

生成动态库: 需要的目标文件得用-fPIC选项生成. 而静态库所需的目标文件可以不用-fPIC选项. 例: 复制代码 代码如下: /////// static.h void static_print(); ///////static.cpp #include <iostream> #include "static.h" void static_print() {      std::cout<<"This is static_print functio