Using Non-Qt Libraries
基本上一個比較大的程式中很難不使用到其他外部函式庫,這邊將會示範如何使用外部函式庫。我們使用 OpenCV 當作範例。
你可以從以下網址取得 OpenCV http://opencv.org/
*.pro file
Qt 的 *.pro 當案是 Qt 記錄所有與專案相關的檔案的路徑以及設定,包含標頭檔、cpp 檔、外部函式庫位置、編譯所需要用到的 flag等等。
以下為專案生成時自動產生的 *.pro 檔案:
#-------------------------------------------------
#
# Project created by QtCreator 2015-03-14T14:40:52
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = OpenCVTest
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
要在 *.pro 中加入 OpenCV 函式庫,你必須牢記以下兩個關鍵字: INCLUDEPATH 和 LIBS,Qt 在讀到這兩個關鍵字後會嘗試尋找被加入的路徑。
你也可以像 C 或是 C++ 一樣自創變數 (例如 OpenCV_Lib、OpenCV_Libd),但是記得不要使用到關鍵字。
OpenCV_Libd = D:/libraries/opencv300b_o/x86/vc12/lib\
OpenCV_Lib = D:/libraries/opencv300b_o/x86/vc12/lib\
INCLUDEPATH += D:/libraries/opencv300b_o/include
LIBS += $$OpenCV_Lib/opencv_world300.lib\
$$OpenCV_Lib/opencv_ts300.lib\
以下的範例程式說明如何把 OpenCV 加入 Qt,在 Qt 中任何路徑盡量以左斜線 (/) 撰寫路徑,Qt 將右斜線視為路徑截止的符號。如果真的非用不可,可以使用 $$quote(<路徑>),所有包在 quote 中的路徑都會被強制讀入,不過這個方法我不建議使用因為只有 Windows 使用右斜線作為路徑,養成使用作斜線的習慣會比較好。
如果你的外部函式庫在 Release 和 Debug 下設定不同,你可以在 LIBS 前面加入 Release 和 Debug 兩個關鍵字來區分。
OpenCV_Libd = D:/libraries/opencv300b_o/x86/vc12/lib
OpenCV_Lib = D:/libraries/opencv300b_o/x86/vc12/lib
INCLUDEPATH += D:/libraries/opencv300b_o/include
Release: LIBS += $$OpenCV_Lib/opencv_world300.lib\
$$OpenCV_Lib/opencv_ts300.lib\
Debug: LIBS += $$OpenCV_Lib/opencv_world300d.lib\
$$OpenCV_Lib/opencv_ts300d.lib\
Run QMake
全部設定完成後記得執行 Qmake (建置 -> Run qmake),通常設定會失敗都是忘記要執行 Qmake。
所以盡量養成只要更動過 *.pro 檔案就執行一次 Qmake 的習慣。 :)