最近用QT開發(fā),要用到數(shù)據(jù)庫快耿,翻開以前的代碼囊陡,雖然自己寫了個框架,但那時年少掀亥,現(xiàn)在重新用以前的套路感覺好費勁撞反。
由于最近搞過springboot、安卓等java應(yīng)用搪花,感覺使用orm框架真的很提高效率遏片。因此想QT應(yīng)該也有orm框架嘹害,經(jīng)過百度對比,使用較多就是QxOrm啦吮便。
本文僅針對linux系統(tǒng)
中的使用笔呀,其他系統(tǒng)請參照官方文檔。
如果有其他更簡便的方法线衫,請告知凿可,感謝!
關(guān)于boost的交叉編譯授账,可參照這里
如在自己的項目中使用QxOrm枯跑,可參照這里
- 開發(fā)環(huán)境
ubuntu10,QtCreator2.4.1(基于Qt4.7.2 32bit) - 本文目標(biāo)
運行QxOrm中的例子 - 本文目錄
一白热、文件下載
二敛助、安裝boost
三、編譯QxOrm項目
四屋确、 運行例子
五纳击、補(bǔ)充:使用系統(tǒng)環(huán)境變量編譯QxOrm
一、文件下載
由于 QxOrm官網(wǎng)鏈接 需要翻墻攻臀,因此提供百度下載焕数,版本為1.4.5
鏈接:https://pan.baidu.com/s/1g9h_3pmwFR5IacQmIQwaAA
提取碼:21j9
下載的鏈接中有3個文件,說明如下:
- QxOrm_1.4.5.zip:該框架源碼刨啸,包括文檔堡赔、示例代碼等
- boost_1_57-精簡.zip:QxOrm官網(wǎng)提供的下載包。如果不需要使用 boost serialization 功能设联,也可以不用下載該文件善已,但例子中用到了,所以要進(jìn)行處理离例。經(jīng)驗證换团,該包沒法在linux下使用。
- boost_1_57_0-完整.zip:完整的boost包宫蛆。由于QxOrm官網(wǎng)使用1.57的版本艘包,因此本人也使用同樣版本,后續(xù)的安裝也使用該文件耀盗。
二辑甜、安裝boost
- 命令行進(jìn)入
boost_1_57_0-完整.zip
的解壓目錄,執(zhí)行以下命令
./bootstrap.sh --prefix=/home/jishufeng/boost_1_57_0
--prefix
是要安裝的目錄袍冷。
- 操作結(jié)束后,執(zhí)行如下命令猫牡,進(jìn)入漫長的安裝..
./b2 install
- 編譯結(jié)束胡诗,找到我們需要的文件。
路徑:/home/jishufeng/boost_1_57_0/lib
。
文件名:libboost_serialization.so.1.57.0
煌恢,但我們一會用boost_serialization
三骇陈、編譯QxOrm項目
- 用
QtCreate
打開QxOrm.pro
,加載整個項目
- 右鍵該項目埠胖,
清理項目
后執(zhí)行qmake
刀脏,運行項目時尤仍,出現(xiàn)如下錯誤
/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
將生成的文件復(fù)制并重命名為libQxOrm.so.1
和libQxOrm.so
如果不進(jìn)行以上操作授瘦,在運行例子時會報如下錯誤
error: cannot find -lQxOrm
關(guān)于so文件的一些知識,可參考
Linux動態(tài)鏈接庫.so文件的創(chuàng)建與使用
四. 運行例子
- QtCreator加載項目
qxBlog.pro
- 在工程文件(pro)中加入下面這段話
QMAKE_CXXFLAGS += -std=c++0x
- 運行
可看到控制臺一堆輸出
也可在./test/_bin
目錄下看到生成的數(shù)據(jù)庫文件
通過Navicat Premium
可查看到數(shù)據(jù)庫文件中的內(nèi)容如下
以上我們已完成目標(biāo)竟宋,以下僅作使用補(bǔ)充提完。
五、補(bǔ)充:使用系統(tǒng)環(huán)境變量編譯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
添加如下系統(tǒng)環(huán)境變量
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
添加后執(zhí)行
source /etc/profile
使環(huán)境變量生效,但在QtCreator似乎沒有生效婉陷,因此重啟虛擬機(jī)
帚称、清理項目、執(zhí)行qmake秽澳,再運行闯睹,重新生成libQxOrm.so
文件
END