1.重点内容
- 准备一个基本项目的程序与资源
- 在Qt Creator中创建一个项目
- 建立该项目的pro文件
- 在Qt Creator中编译运行该
2.运行展示
3.程序示例
3.1 准备一个基本项目的程序与资源
在Qt工作目录中建立一个项目目录psample00u0,在psample00u0目录下建立3个子目录,分别是build,include,resoruce。
- 目录build:存放项目编译后生成的程序代码文件及依赖代码,如dll,lib,exe等文件。在build下分别建立5.14.2->win32->debug->lib目录结构(5.14.2:Qt的版本号,wind32:windows32位,debug:debug模式,lib:编辑生成或依赖的dll,lib等文件),5.14.2->win32-release-lib目录结构。
- 目录include:存放项目依赖的头文件,一个基本项目的头文件包括peanublib(peanutlib库头文件),3rdparty(第三方库头文件)。
注:有关头文件的获取请参考“4.代码下载”。
3.2 在Qt Creator中创建一个项目
首先查看自己Qt及Qt Creator的版本,您构建的程序与版本有关,下面是一个例子。
在Qt Crearor中,在您的工作目录中新建一个Qt Widgets Application项目。
3.3 建立该项目的psample00u0.pro文件
- 在当前工作目录psample00u0\build\5.14.2\win32\debug\lib下,建立依赖文件(相关依赖文件的资源,请参考“4.代码下载”),具体资源如下:
- 在当前工作目录psample00u0\build\5.14.2\win32\release\lib下,建立依赖文件(相关依赖文件的资源,请参考“4.代码下载”),具体资源如下:
- 修改psample00u0.pro文件
#编译成生可执行程序
TEMPLATE = app
#引入Qt各模块
QT += core gui widgets xml sql network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
#生成目标
CONFIG(release, debug|release) {
#realease模式下的目标文件
TARGET = psample00u0
} else {
#debug模式下的目标文件
TARGET = psample00u0d
}
isEmpty(BINARY_RESULT_DIR) {
BINARY_RESULT_DIR = $${PWD}
}
!CONFIG(no_build_translations) {
CONFIG *= build_translations
}
!CONFIG(no_log4qt) {
CONFIG *= log4qt
}
!CONFIG(no_thirdwidget) {
CONFIG *= thirdwidget
}
!CONFIG(no_peanutlib) {
CONFIG *= peanutlib
}
CONFIG(release, debug|release) {
message(Release)
BUILD_TYPE = release
}else{
message(Debug)
BUILD_TYPE = debug
}
#引入依赖头文件存放地址:声明LOG4QT_PATH变量,在项目根目录下的include/3rdparty/log4qt
LOG4QT_PATH = $$PWD/include/3rdparty/log4qt
CONFIG(log4qt) {
DEFINES *= HAVE_LOG4QT
}
#引入依赖头文件存放地址:声明THIRDWIDGET_PATH变量
THIRDWIDGET_PATH = $$PWD/include/3rdparty/thirdwidget
CONFIG(thirdwidget) {
DEFINES *= HAVE_THIRDWIDGET
}
#引入依赖头文件存放地址:声明PEANUTLIB_PATH变量,peanutlib库
PEANUTLIB_PATH = $$PWD/include/peanutlib
CONFIG(peanutlib) {
DEFINES *= HAVE_PEANUTLIB
}
SOURCES += \
main.cpp \
ps_application.cpp \
ps_helloworld_mainwindow.cpp \
ps_mainwindow.cpp
HEADERS += \
ps_application.h \
ps_helloworld_mainwindow.h \
ps_mainwindow.h
FORMS += \
ps_helloworld_mainwindow.ui \
ps_mainwindow.ui
#编译生成目录
BUILD_DIR = $${BINARY_RESULT_DIR}/build/$${QT_VERSION}
#头文件依赖目录
DEST_INCLUDE_DIR = $$PWD/include
#unix,linux生成
unix{
ARCH_DIR = $${OUT_PWD}/unix
ARCH_TYPE = unix
macx{
ARCH_DIR = $${OUT_PWD}/macx
ARCH_TYPE = macx
}
linux{
!contains(QT_ARCH, x86_64) {
message("Compiling for 32bit system")
ARCH_DIR = $${OUT_PWD}/linux32
ARCH_TYPE = linux32
}else{
message("Compiling for 64bit system")
ARCH_DIR = $${OUT_PWD}/linux64
ARCH_TYPE = linux64
}
}
}
#windows编译生成
win32 {
!contains(QT_ARCH, x86_64) {
message("Compiling for 32bit system")
ARCH_DIR = $${OUT_PWD}/win32
ARCH_TYPE = win32
} else {
message("Compiling for 64bit system")
ARCH_DIR = $${OUT_PWD}/win64
ARCH_TYPE = win64
}
}
#编译生成的dll,lib等文件存放目录
DEST_LIBS = $${BUILD_DIR}/$${ARCH_TYPE}/$${BUILD_TYPE}/lib
#编译生成的可执行文件存放目录
DEST_BINS = $${BUILD_DIR}/$${ARCH_TYPE}/$${BUILD_TYPE}/$${TARGET}
MOC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/moc
#指定来自uic的所有中间文件放置的目录(.ui文件转化成ui_*.h文件的存放目录
UI_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/ui
UI_HEADERS_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/ui
UI_SOURCES_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/ui
OBJECTS_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/obj
RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc
#装载log4qt
CONFIG(log4qt) {
message(log4qt)
INCLUDEPATH += \
$$LOG4QT_PATH \
$$LOG4QT_PATH/log4qt
DEPENDPATH += \
$$LOG4QT_PATH \
$$LOG4QT_PATH/log4qt
LIBS += -L$${DEST_LIBS}
CONFIG(debug, debug|release) {
LIBS += -llog4qtd
} else {
LIBS += -llog4qt
}
}
#装载thirdwidget
CONFIG(thirdwidget) {
message(thirdwidget)
INCLUDEPATH += \
$$THIRDWIDGET_PATH \
$$THIRDWIDGET_PATH/QtAwesome \
$$THIRDWIDGET_PATH/qtrest
DEPENDPATH += \
$$THIRDWIDGET_PATH \
$$THIRDWIDGET_PATH/QtAwesome \
$$THIRDWIDGET_PATH/qtrest
LIBS += -L$${DEST_LIBS}
CONFIG(debug, debug|release) {
LIBS += -lthirdwidgetd
} else {
LIBS += -lthirdwidget
}
}
#装载PeanutLib
CONFIG(peanutlib) {
message(peanutlib)
INCLUDEPATH += \
$$PEANUTLIB_PATH
DEPENDPATH += \
$$PEANUTLIB_PATH
LIBS += -L$${DEST_LIBS}
CONFIG(debug, debug|release) {
LIBS += -lpeanutlibd
} else {
LIBS += -lpeanutlib
}
}
DEST_DIR = $${DEST_BINS}
PEANUT_SAMPLE_DIR = $${DEST_DIR}
macx{
CONFIG += app_bundle
}
unix:{
DESTDIR = $$DEST_DIR
QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$$EXTRA_DIR\" \"$$PEANUT_SAMPLE_DIR\" $$escape_expand(\n\t)
linux{
#Link share lib to ../lib rpath
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/../lib
QMAKE_LFLAGS_RPATH += #. .. ./libs
}
target.path = $${DEST_DIR}
INSTALLS = target
}
win32 {
DESTDIR = $$DEST_DIR
contains(QMAKE_HOST.os, Linux) {
QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$$EXTRA_DIR\" \"$$PEANUT_SAMPLE_DIR\" $$escape_expand(\n\t)
} else {
EXTRA_DIR ~= s,/,\\,g
DEST_DIR ~= s,/,\\,g
}
}
RESOURCES += \
resource/res.qrc
3.4 在Qt Creator中编译运行该项目
Qt Creator在debug模式下编译,编译生成的环境如下:
目前生成的环境是debug模式下,该模式允许在Qt Creator环境下调试,不能单独运行,如果要单独运行,请参考其它有关发布章节。
4. 代码下载
代码下载链接:(62条消息) psample00u0-C++文档类资源-CSDN文库https://download.csdn.net/download/wangrq_cn/87468165
Peanutlib项目演示程序下载:peanut_pwdis: pwdis是QT应用系统开发框架(C++),采用分层模块化设计,底层peanutlib按模块封装方便易用的类库及API(xml,db,appconfig,log,grid,json,bean等十几个),应用层提供部门人员权限及报表等,还提供了开发中常用的组件使用。