Qt静态编译后使用QtCipherSqlitePlugin静态编译库

      Qt静态编译后使用QtCipherSqlitePlugin静态编译库

语文功底不好,标题起的有点绕口,解释一下:

      就是我使用的Qt是Qt5.15.2静态编译包(要Qt静态编译文件这里下载QT5.15.2静态编译包下载 - koomee - 博客园 (cnblogs.com)),

   2024-04-28 更新:

           更好的办法:添加对应的qt_plugin_sqlitecipher.pri文件到QT的modules文件夹 ,123走起

       1. 下载QtCipherSqlitePlugin这个插件,并选择静态编译,得到sqlitecipher.lib 和 sqlitecipherd.lib,同时也会得到sqlitecipher.prl、sqlitecipherd.prl 和 sqlitecipherd.pdb,

          将这几个文件拷贝到QtInsallDir/\plugins\sqldrivers目录下:

                     

        2. 注册插件:将编译目录下的\mkspecs\modules-inst目录下的qt_plugin_sqlitecipher.pri文件,拷贝到QtInsallDir\mkspecs\modules目录下

 

                           

        3. 修改编辑sqlitecipher.prlsqlitecipherd.prl文件,修改QMAKE_PRL_LIBSQMAKE_PRL_LIBS_FOR_CMAKE字段,将绝对位置改为相对位置

//sqlitecipher.prl

QMAKE_PRL_LIBS = $$[QT_INSTALL_LIBS]/Qt5Sql.lib $$[QT_INSTALL_LIBS]/Qt5Sql.lib $$[QT_INSTALL_LIBS]/Qt5Core.lib mpr.lib userenv.lib version.lib $$[QT_INSTALL_LIBS]/qtpcre2.lib netapi32.lib ws2_32.lib advapi32.lib kernel32.lib ole32.lib shell32.lib uuid.lib user32.lib winmm.lib
QMAKE_PRL_LIBS_FOR_CMAKE = $$[QT_INSTALL_LIBS]/Qt5Sql.lib;$$[QT_INSTALL_LIBS]/Qt5Core.lib;mpr.lib;userenv.lib;version.lib;$$[QT_INSTALL_LIBS]/qtpcre2.lib;netapi32.lib;ws2_32.lib;advapi32.lib;kernel32.lib;ole32.lib;shell32.lib;uuid.lib;user32.lib;winmm.lib;;;

 

//sqlitecipherd.prl
QMAKE_PRL_LIBS = $$[QT_INSTALL_LIBS]/Qt5Sqld.lib $$[QT_INSTALL_LIBS]/Qt5Cored.lib mpr.lib userenv.lib version.lib $$[QT_INSTALL_LIBS]/qtpcre2d.lib netapi32.lib ws2_32.lib advapi32.lib kernel32.lib ole32.lib shell32.lib uuid.lib user32.lib winmm.lib
QMAKE_PRL_LIBS_FOR_CMAKE = $$[QT_INSTALL_LIBS]/lib/Qt5Sqld.lib;$$[QT_INSTALL_LIBS]/lib/Qt5Cored.lib;mpr.lib;userenv.lib;version.lib;$$[QT_INSTALL_LIBS]/qtpcre2d.lib;netapi32.lib;ws2_32.lib;advapi32.lib;kernel32.lib;ole32.lib;shell32.lib;uuid.lib;user32.lib;winmm.lib;;;

4 .使用

#include <QtSql>
#include<QtPlugin>

//用如下语句打印可用驱动,测试是否成功:
qDebug() << QSqlDatabase::drivers();

之前没有好好读文档,浅尝辄止,就采用了下面的方法:

这是我在2024-02-18的时候尝试QT数据库编程时记录的方法,能用,就是配置时麻烦一点。但好处是库可以跟着工程一期拷贝着走。

Qt静态编译后使用QtCipherSqlitePlugin静态编译库 @2024-02-18    

先入正题讲解决办法(12345走起):

   我的开发环境VS2022+Qt-tools+Qt5.15.2(动态编译版和静态编译版都有),在这个环境下的操作如下;

 

      1. 下载QtCipherSqlitePlugin这个插件,并编译sqlitecipher.lib 和 sqlitecipherd.lib 放到你的项目文件夹下(也可以放到其他地方);

      2. 在VS中右键你的项目->属性->Qt project seting->选项设置 Additional Project Settings->添加 QTPLUGIN+= sqlitecipher  ;       

             

   3. 右键你的项目->添加->现有项;选择你编译出来的库 sqlitecipher.lib 和 sqlitecipherd.lib 并添加

                

  4 .  在.cpp文件中包含头文件并添加语句:Q_IMPORT_PLUGIN(SqliteCipherDriverPlugin);        

 

#include <QtSql>
#include<QtPlugin>

Q_IMPORT_PLUGIN(SqliteCipherDriverPlugin);

   5 . 用如下语句打印可用驱动,测试是否成功:    

    qDebug() << QSqlDatabase::drivers();

      如果不出意外你是会成功的。

 

下面记录我解决这个问题的心路历程,

 

最近需要用到程序内嵌数据库,SQLite当然是最好的选择,但是Qt自带的SQLite不能加密,

于是就打算使用QtCipherSqlitePlugin这个插件(下载地址:GitHub - devbean/QtCipherSqlitePlugin: A Qt plugin for cipher SQLite.);

    先说一下我的开发环境VS2022+Qt-tools+Qt5.15.2(动态编译版和静态编译版都有)  有时也用Qt Creator开发

          

             

 

    网上都是讲编译成DLL然后放到Qt动态编译版的 $$QT_DIR\plugins\sqldrivers目录下;我编译成sqlitecipher.dll 和 sqlitecipherd.dll后,采用动态编译时是没有问题的。     

   
#include <QtDebug>
#include <QtSql>

//打印可用驱动
qDebug() << QSqlDatabase::drivers();

       如下图是可以得到SQLITECIPHER驱动的;

            

 但是在程序发布的时候我想采用静态编译QT编译发布,我编译了 sqlitecipher.lib 和 sqlitecipherd.lib 放到$$QT_DIR\plugins\sqldrivers目录下;在编译时就提示找不到 SQLITECIPHER 的驱动;

                    

      于是只有百度求助万能的广大码友。终于,皇天不负有心人,我找到了这位网友的文章:如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC_qt 静态编译怎么添加插件-CSDN博客

   摘抄部分内容如下:             

       我了解到,Qt“调用静态插件”, Qt正好有那么篇介绍的文章:
       How to Create Qt Plugins
        按照上面的说明,在.pro 文件中加入如下语句:
        QTPLUGIN+= qsqlodbc 
        并在.cpp文件中添加语句:
        #include<QtPlugin>
        Q_IMPORT_PLUGIN(QODBCDriverPlugin)
原文链接:https://blog.csdn.net/humadivinity/article/details/50545100

 由于我使用的开发环境是VS2022+Qt-tools+Qt5.15.2 和Qt Creator里面添加插件语句设置不一样;这里需要这样设置:

    在VS中右键你的项目->属性->Qt project seting->选项设置 Additional Project Settings->添加 QTPLUGIN+= sqlitecipher  ; 

 

  然后要使用Qt plugin需要添加头文件并引入Plugin:   

#include <QtSql>
#include<QtPlugin>
//引入插件 注意这里是
SqliteCipherDriverPlugin
Q_IMPORT_PLUGIN(SqliteCipherDriverPlugin);

  然后 清理,重新编译,运行,得到如下:

        
     到这里算是成功了!!
 

 

posted @ 2024-04-24 16:21  koomee  阅读(85)  评论(0编辑  收藏  举报