zoukankan      html  css  js  c++  java
  • qt在动态库里面加载widget的例子

    testDll和testExe项目

    备注:windows下dll内不需要new QApplication, linux和mac下面需要在动态库里面new QApplication

    testdll.h

     1 #ifndef TESTDLL_H
     2 #define TESTDLL_H
     3 
     4 #include"testDll_global.h"
     5 
     6 extern "C" TESTDLLSHARED_EXPORT void initApp(void);
     7 extern "C" TESTDLLSHARED_EXPORT void showDlg(void);
     8 
     9 extern "C" void cleanApp(void);
    10 
    11 class QApplication;
    12 static QApplication* shareApplication;
    13 
    14 #endif//TESTDLL_H

    testDll_global.h

     1 #ifndef TESTDLL_GLOBAL_H
     2 #define TESTDLL_GLOBAL_H
     3 
     4 #include <QtCore/qglobal.h>
     5 
     6 #if defined(TESTDLL_LIBRARY)
     7 #  define TESTDLLSHARED_EXPORT Q_DECL_EXPORT
     8 #else
     9 #  define TESTDLLSHARED_EXPORT Q_DECL_IMPORT
    10 #endif
    11 
    12 #endif // TESTDLL_GLOBAL_H

    testdll.cpp

    #include<QApplication>
    #include<QMessageBox>
    #include"TestDll.h"
    #include"Form.h"
    
    extern "C" TESTDLLSHARED_EXPORT void initApp(void)
    {
        shareApplication=NULL;
    }
    
    extern "C" TESTDLLSHARED_EXPORT void showDlg(void)
    {
        if( NULL == shareApplication )
        {
            int argc=0;
    
            //windows下注释掉
    //        shareApplication = new QApplication(argc,NULL);
    
            Form* pForm=new Form;
            pForm->show();
    
    //        shareApplication->exec();
        }
    }
    
    extern "C" void cleanApp(void)
    {
        if( NULL != shareApplication )
        {
            QMessageBox::information(NULL,"","appdestroyed",0);
    
    //        shareApplication->quit();
    //        shareApplication=NULL;
        }
    }

    testExe的测试cpp里面

     1 void MainWindow::on_pushButton_clicked()
     2 {
     3     QLibrary dll("testDll");
     4 
     5     if( !dll.load() ) return;
     6 
     7     typedef void(*DLL_INIT_APP)();
     8     typedef void(*DLL_SHOW_DLG)();
     9 
    10     DLL_INIT_APP dll_initApp = (DLL_INIT_APP)dll.resolve("initApp");
    11 
    12     DLL_SHOW_DLG dll_showDlg= (DLL_SHOW_DLG)dll.resolve("showDlg");
    13 
    14     dll_initApp();
    15     dll_showDlg();
    16 }
  • 相关阅读:
    控制反转容器&依赖注入模式(转)
    基于消息与.Net Remoting的分布式处理架构(转)
    项目文档书写(序)
    jQuery使用手册
    大型社区的设计
    实战之数据结构篇(线性表,堆栈与队列)
    你必须知道的C#的25个基础概念
    SOA架构师注意的问题
    经典语录
    项目文档之(详细设计说明书)
  • 原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/3587738.html
Copyright © 2011-2022 走看看