在linux系统中使用QxOrm框架1:运行QxOrm框架中的例子

最近用QT开发,要用到数据库,翻开以前的代码,虽然自己写了个框架,但那时年少,现在重新用以前的套路感觉好费劲。
由于最近搞过springboot、安卓等java应用,感觉使用orm框架真的很提高效率。因此想QT应该也有orm框架,经过百度对比,使用较多就是QxOrm啦。


本文仅针对linux系统中的使用,其他系统请参照官方文档。
如果有其他更简便的方法,请告知,感谢!
关于boost的交叉编译,可参照这里
如在自己的项目中使用QxOrm,可参照这里


  • 开发环境
    ubuntu10,QtCreator2.4.1(基于Qt4.7.2 32bit)
  • 本文目标
    运行QxOrm中的例子
  • 本文目录
    一、文件下载
    二、安装boost
    三、编译QxOrm项目
    四、 运行例子
    五、补充:使用系统环境变量编译QxOrm

一、文件下载

由于 QxOrm官网链接 需要翻墙,因此提供百度下载,版本为1.4.5
链接:https://pan.baidu.com/s/1g9h_3pmwFR5IacQmIQwaAA
提取码:21j9
下载的链接中有3个文件,说明如下:

  • QxOrm_1.4.5.zip:该框架源码,包括文档、示例代码等
  • boost_1_57-精简.zip:QxOrm官网提供的下载包。如果不需要使用 boost serialization 功能,也可以不用下载该文件,但例子中用到了,所以要进行处理。经验证,该包没法在linux下使用。
  • boost_1_57_0-完整.zip:完整的boost包。由于QxOrm官网使用1.57的版本,因此本人也使用同样版本,后续的安装也使用该文件。

二、安装boost

  1. 命令行进入boost_1_57_0-完整.zip 的解压目录,执行以下命令

./bootstrap.sh --prefix=/home/jishufeng/boost_1_57_0

--prefix是要安装的目录。

  1. 操作结束后,执行如下命令,进入漫长的安装..

./b2 install

  1. 编译结束,找到我们需要的文件。
    路径:/home/jishufeng/boost_1_57_0/lib
    文件名:libboost_serialization.so.1.57.0,但我们一会用boost_serialization
    image.png

三、编译QxOrm项目

  1. QtCreate打开QxOrm.pro,加载整个项目
    image.png
  2. 右键该项目,清理项目执行qmake,运行项目时,出现如下错误

/usr/include/c++/4.4/c++0x_warning.h:31: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

在工程文件(pro)中加入下面这段话就OK了,下面例子同样需要添加这句话。

QMAKE_CXXFLAGS += -std=c++0x

  1. 修改QxOrm.pri文件

a. 由于该例子要用到 boost serialization,因此我们需要取消QxOrm.pri中如下两个位置的注释

DEFINES += _QX_ENABLE_BOOST
DEFINES += _QX_ENABLE_BOOST_SERIALIZATION

b. 修改依赖路径
将如下

contains(DEFINES, _QX_ENABLE_BOOST) {
isEmpty(QX_BOOST_INCLUDE_PATH) { QX_BOOST_INCLUDE_PATH = $$quote($$(BOOST_INCLUDE)) }
contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION) {

isEmpty(QX_BOOST_LIB_PATH) { QX_BOOST_LIB_PATH = $$quote($$(BOOST_LIB)) }
isEmpty(QX_BOOST_LIB_SERIALIZATION_DEBUG) { QX_BOOST_LIB_SERIALIZATION_DEBUG = "$$(BOOST_LIB_SERIALIZATION_DEBUG)" }
isEmpty(QX_BOOST_LIB_SERIALIZATION_RELEASE) { QX_BOOST_LIB_SERIALIZATION_RELEASE = "$$(BOOST_LIB_SERIALIZATION_RELEASE)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG = "$$(BOOST_LIB_WIDE_SERIALIZATION_DEBUG)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE = "$$(BOOST_LIB_WIDE_SERIALIZATION_RELEASE)" }

} # contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION)
} # contains(DEFINES, _QX_ENABLE_BOOST)

修改为

contains(DEFINES, _QX_ENABLE_BOOST) {
# 修改为boost的源码根目录
isEmpty(QX_BOOST_INCLUDE_PATH) { QX_BOOST_INCLUDE_PATH = $$quote(/mnt/hgfs/vm_share/source/boost_1_57_0) }
contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION) {

# 修改为boost安装目录下的lib文件夹
isEmpty(QX_BOOST_LIB_PATH) { QX_BOOST_LIB_PATH = $$quote(/home/jishufeng/boost_1_57_0/lib) }
# 以下两个修改为 boost 安装后生成的 boost_serialization 库的名称
isEmpty(QX_BOOST_LIB_SERIALIZATION_DEBUG) { QX_BOOST_LIB_SERIALIZATION_DEBUG = "boost_serialization" }
isEmpty(QX_BOOST_LIB_SERIALIZATION_RELEASE) { QX_BOOST_LIB_SERIALIZATION_RELEASE = "boost_serialization" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG = "$$(BOOST_LIB_WIDE_SERIALIZATION_DEBUG)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE = "$$(BOOST_LIB_WIDE_SERIALIZATION_RELEASE)" }

} # contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION)
} # contains(DEFINES, _QX_ENABLE_BOOST)

请注意修改后添加的注释位置,修改为自己的路径

  1. 重新清理、qmake、运行后,可在QxOrm的lib目录下看到刚生成的文件libQxOrm.so.1.4.5
    image.png

    将生成的文件复制并重命名为libQxOrm.so.1libQxOrm.so
    image.png

    如果不进行以上操作,在运行例子时会报如下错误

error: cannot find -lQxOrm

image.png

关于so文件的一些知识,可参考
Linux动态链接库.so文件的创建与使用

四. 运行例子

  1. QtCreator加载项目qxBlog.pro
    image.png
  2. 在工程文件(pro)中加入下面这段话

QMAKE_CXXFLAGS += -std=c++0x

  1. 运行
    可看到控制台一堆输出
    image.png

    也可在./test/_bin目录下看到生成的数据库文件
    image.png

    通过Navicat Premium可查看到数据库文件中的内容如下
    image.png

以上我们已完成目标,以下仅作使用补充。


五、补充:使用系统环境变量编译QxOrm

在上面,我们编译QxOrm项目是修改pri文件中的变量,我们也可以

  1. 同样取消以下2个注释
DEFINES += _QX_ENABLE_BOOST
DEFINES += _QX_ENABLE_BOOST_SERIALIZATION
  1. 保持pri文件如下位置不变
contains(DEFINES, _QX_ENABLE_BOOST) {
isEmpty(QX_BOOST_INCLUDE_PATH) { QX_BOOST_INCLUDE_PATH = $$quote($$(BOOST_INCLUDE)) }
contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION) {

isEmpty(QX_BOOST_LIB_PATH) { QX_BOOST_LIB_PATH = $$quote($$(BOOST_LIB)) }
isEmpty(QX_BOOST_LIB_SERIALIZATION_DEBUG) { QX_BOOST_LIB_SERIALIZATION_DEBUG = "$$(BOOST_LIB_SERIALIZATION_DEBUG)" }
isEmpty(QX_BOOST_LIB_SERIALIZATION_RELEASE) { QX_BOOST_LIB_SERIALIZATION_RELEASE = "$$(BOOST_LIB_SERIALIZATION_RELEASE)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG = "$$(BOOST_LIB_WIDE_SERIALIZATION_DEBUG)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE = "$$(BOOST_LIB_WIDE_SERIALIZATION_RELEASE)" }

} # contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION)
} # contains(DEFINES, _QX_ENABLE_BOOST)
  1. /etc/profile添加如下系统环境变量
export BOOST_INCLUDE=/mnt/hgfs/vm_share/source/boost_1_57_0
export BOOST_LIB=/home/jishufeng/boost_1_57_0/lib
export BOOST_LIB_SERIALIZATION_DEBUG=boost_serialization
export BOOST_LIB_SERIALIZATION_RELEASE=boost_serialization

添加后执行source /etc/profile使环境变量生效,但在QtCreator似乎没有生效,因此重启虚拟机、清理项目、执行qmake,再运行,重新生成libQxOrm.so文件


END

你可能感兴趣的:(在linux系统中使用QxOrm框架1:运行QxOrm框架中的例子)