最近用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
- 命令行进入
boost_1_57_0-完整.zip
的解压目录,执行以下命令
./bootstrap.sh --prefix=/home/jishufeng/boost_1_57_0
--prefix
是要安装的目录。
- 操作结束后,执行如下命令,进入漫长的安装..
./b2 install
- 编译结束,找到我们需要的文件。
路径:/home/jishufeng/boost_1_57_0/lib
。
文件名:libboost_serialization.so.1.57.0
,但我们一会用boost_serialization
三、编译QxOrm项目
- 用
QtCreate
打开QxOrm.pro
,加载整个项目
- 右键该项目,
清理项目
后执行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
- 修改
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)
请注意修改后添加的注释位置,修改为自己的路径
- 重新清理、qmake、运行后,可在QxOrm的lib目录下看到刚生成的文件
libQxOrm.so.1.4.5
将生成的文件复制并重命名为libQxOrm.so.1
和libQxOrm.so
如果不进行以上操作,在运行例子时会报如下错误
error: cannot find -lQxOrm
关于so文件的一些知识,可参考
Linux动态链接库.so文件的创建与使用
四. 运行例子
- QtCreator加载项目
qxBlog.pro
- 在工程文件(pro)中加入下面这段话
QMAKE_CXXFLAGS += -std=c++0x
- 运行
可看到控制台一堆输出
也可在./test/_bin
目录下看到生成的数据库文件
通过Navicat Premium
可查看到数据库文件中的内容如下
以上我们已完成目标,以下仅作使用补充。
五、补充:使用系统环境变量编译QxOrm
在上面,我们编译QxOrm
项目是修改pri
文件中的变量,我们也可以
- 同样取消以下2个注释
DEFINES += _QX_ENABLE_BOOST
DEFINES += _QX_ENABLE_BOOST_SERIALIZATION
- 保持
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)
- 在
/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