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


    

      QT的内存管理

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

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

    3  组件能够指定父对象

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

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

    QLineEdit* edit = new QLineEdit(this);

     

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

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

     

      QT中制作动态库

    A  新建一个库项目

    项目文件夹结构例如以下:

    编写代码

    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";
    }

    点击构建button:

    到项目文件夹E:QTuild-T14Library-Desktop_Qt_5_3_MinGW_32bit-Debugdebug下查看:

    B  加入一个空QT项目来使用QT

    编写的代码例如以下:

    T15UseLibrary.pro

    SOURCES += 
        main.cpp
     
    #假设QT mingw版本号,使用动态库方式和Linux没差别(-L,-l)
    #假设QT VS版本号。。。使用动态库方式和windows没差别
    #假设QT mingw版本号,要调用VC写的动态库。使用一个工具,生成libXXXXXX.文件
    # 注意-L后面是dll所在的目录路径。-l后面表示的是动态库的名字
    LIBS += -LE:QTuild-T14Library-Desktop_Qt_5_3_MinGW_32bit-Debugdebug -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();
    }

    执行结果:

     

      编写一个静态库

    创建项目:

    一直点击,直到完毕。

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

     

  • 相关阅读:
    uniapp 基于 flyio 的 http 请求封装
    微信小程序实现连续扫码功能(uniapp)
    定时器+echarts运行时间太长导致内存溢出页面崩溃
    vue2.0 + element ui 实现表格穿梭框
    js 不同时间格式介绍以及相互间的转换
    vue2.0+Element UI 表格前端分页和后端分页
    vue2.0 + Element UI + axios实现表格分页
    kafka能做什么?kafka集群配置 (卡夫卡 大数据)
    Java List和Map遍历的方法,forEach()的使用
    Flink 集群搭建,Standalone,集群部署,HA高可用部署
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5269529.html
Copyright © 2020-2023  润新知