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 }
  • 相关阅读:
    HTML5 JSDOM
    svn 基本操作
    Flex布局
    git上传布置代码 git优势
    jsonp, json区别
    require.js 模块化简单理解
    @vue/cli 3 安装搭建及 webpack 配置
    npm 常用命令 使用命令删除 node_modules 包
    package.json字段分析
    rem适配方案
  • 原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/3587738.html
Copyright © 2011-2022 走看看