利用Qt进行c++的GUI开发,在我看来是所有GUI方案中,最有吸引力的一个。
一方面,Qt的API封装的特别好,很接近其他“先进”的UI框架,就算是进行大规模的程序开发,Qt也能够胜任。
另一方面i,Qt Creator在构建工程方面,原来很是方便。我一开始不太了解链接库方面的只是,于是拼命找轻量级的GUI框架。用了一下FLTK,和Qt一比简直就是渣渣。下面简单记录一下Qt如何配置工程的动态链接库。
安装Qt的流程随便google一下就可以找到。简单说下。
1. google Qt
2. download Qtxxxxxx.run
3. go to terminal, sudo chmod -x Qtxxxxx.run (+x意思是增加execute权限)
4. follow install UI
安装完成之后,新建一个工程,找到.pro文件。
假设:
现在有一个动态链接库名为 libXYZ.so, 路径为/path/to/the/lib,
该动态链接库的头文件为 XYZ .h,路径为/path/to/the/include
则应该添加如下内容到.pro文件
INCLUDEPATH += /path/to/the/include
LIBS += -L/path/to/the/lib
LIBS += -lXYZ
INCLUDEPATH += $$PWD/include
下面举一个例子。这个例子也许有很多搞机器学习的同学有同样需求
使用CAFFE深度学习框架进行某种detection的试验,然后想直接利用caffe的代码进行前向,并接入后续的工程,构建一个UI界面,该如何做呢?
这个例子除了要把caffe生成的.so文件链接到Qt工程,还需要把CAFFE的依赖添加到工程,否则caffe也无法执行
.pro文件如下
#-------------------------------------------------
#
# Project created by QtCreator 2015-11-11T22:18:07
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = xxxxxx
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
argmanager.cpp \
imageprocessor.cpp \
statuscontroll.cpp
HEADERS += mainwindow.h \
argmanager.h \
common.h \
imageprocessor.h \
statuscontroll.h
FORMS += mainwindow.ui
# adding dynamic links of CAFFE and its dependencies
# caffe
INCLUDEPATH += /home/somebody/caffe/include /home/somebody/caffe/build/src
LIBS += -L/home/somebody/caffe/build/lib
LIBS += -lcaffe
# cuda
INCLUDEPATH += /usr/local/cuda/include
LIBS += -L/usr/local/cuda/lib64
LIBS += -lcudart -lcublas -lcurand
# opencv
LIBS += -lopencv_core -lopencv_imgproc -lopencv_highgui
# other dependencies
LIBS += -lglog -lgflags -lprotobuf -lboost_system -lboost_thread -llmdb -lleveldb -lstdc++ -lcudnn -lcblas -latlas
# 注意路径不能照搬,要根据具体情况具体分析哦!