计算机系统应用教程网站

网站首页 > 技术文章 正文

学习QT之解决方案和项目结构(qt项目管理)

btikc 2025-02-03 11:30:46 技术文章 16 ℃ 0 评论

本文使用QT5创建工程, 具体版本为 QT5.14.2, 包含的 QT Creator 为 4.11.1

1. 创建默认QT工程

1. 打开 QT Creator(4.11.1 社区版) , 文件 -> 新建:

2. 设置项目名称和选择存放路径:

3. 选择 Build System

此处可选的有:

  • CMake :
  • qmake :
  • Qbs :

此处先使用默认项.

4. 设置主窗口的信息:

  • class name 及 base class
  • header file 及 source file
  • 主窗口ui : mainwindow.ui

5. 选择默认使用本地语言

此处选择了"简体中文", 后续可增加配置

6. 选择编译套件 Kits:

7. 最后预览项目, 可选择 git 作为版本选择

完成后默认为 编辑 main.cpp界面:

点击左下角的运行 或者 Ctrl + R, 运行项目, 可看到一个空界面的 App:

2. 项目目录及文件

在 "编辑" 一栏中可看到项目目录及文件:

概要说明如下:

FirstQt5 : 项目名称及git分支

  • CMakeList.txt : CMakeList内容
  • FirstQt5 : 工程名称
    • main.cpp : QT App应用入口源文件
    • mainwindow.cpp : 主窗口源文件
    • mainwindow.h : 主窗口头文件
    • Header Files : 头文件目录
    • Source Files : 源文件目录
    • FirstQT_zh_CN.ts : (此文件在文件管理中可看到)项目本地化语言文件,此处为 zh_CN 简体中文文件
    • mainwindow.ui : 主界面的ui, 可使用界面化鼠标操作
  • CMake Modlues : CMake 模块 QT安装目录
    • C:\QT

如果我们创建项目的时候不勾选 "Generate form", 如下图:

则项目结构如下, 少了一个 mainwindow.ui,

若大家觉得看文章不过瘾,可以来拿Qt开发视频教程,给大家整理了一个几十小时的视频教程合集(内含:Qt C++基础,控件、布局管理、Qt框架、QML、Opencv、qt线程,,Qt界面开发,Qt网络,Qt数据库编程,Qt项目实战等),还有配套课件资料给大家哦。↓↓↓见下面↓↓点击↓↓

2.1 CMakeList.txt 文件

文件内容如下, 文件内容直接在下面使用注释说明.

# cmake 最低要求版本 3.5, 测试电脑安装为 3.23.1
cmake_minimum_required(VERSION 3.5)
# 项目配置
project(FirstQt5 LANGUAGES CXX)
# CMAKE配置项: 包含当前目录 on
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# CMAKE配置项: 是否为Qt目标自动处理 uic
set(CMAKE_AUTOUIC ON)
# CMAKE配置项: 是否为Qt目标自动处理 moc
set(CMAKE_AUTOMOC ON)
# CMAKE配置项: 是否为Qt目标自动处理 rcc
set(CMAKE_AUTORCC ON)
# 要求构建这个目标的C++标准的特征版本 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#   set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#   if (ANDROID_ABI STREQUAL "armeabi-v7a")
#       set(ANDROID_EXTRA_LIBS
#           ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#           ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#   endif()
#endif()

# 查找package
find_package(Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
# 设置变量 TS_FILES 为 FirstQt5_zh_CN.ts 语言文件
set(TS_FILES FirstQt5_zh_CN.ts)
# 添加包含的文件
if(ANDROID)
 add_library(FirstQt5 SHARED
  main.cpp
  mainwindow.cpp
  mainwindow.h
  mainwindow.ui
   ${TS_FILES}
 )
else()
 add_executable(FirstQt5
  main.cpp
  mainwindow.cpp
  mainwindow.h
  mainwindow.ui
   ${TS_FILES}
 )
endif()
# 将目标文件与库文件进行链接
target_link_libraries(FirstQt5 PRIVATE Qt5::Widgets)
# 处理给定的源文件(目录或单个文件)以生成Qt Linguist .ts文件, 其中 CMAKE_SOURCE_DIR 为工程顶层目录
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})

2.2 Source Files

源文件包含两个:

  • main.cpp : qt 应用的主函数入口
  • mainwindow.cpp : 应用的主窗口

其中 main.cpp 如下:

// mainwindow.h 文件是我们自己创建的,引入时用" "双引号括起来
#include "mainwindow.h"
// QApplication 是 Qt 提供给我们的,引入时用<>括起来
#include 
// main() 函数是应用程序的入口。它的主要功能是创建应用程序,创建窗口,显示窗口,并运行应用程序,开始应用程序的消息循环和事件处理。
// argc : 命令行变量的数量
// argv : 命令行变量数组
int main(int argc, char *argv[])
{
   // 定义并创建应用程序
   QApplication a(argc, argv);
   // 定义并创建窗口
   MainWindow w;
   // 显示窗口
   w.show();
   // 应用程序运行, 开始应用程序的消息循环和事件处理
   return a.exec();
}

2.3 mainwindow代码

如果是创建项目时没有勾选创建 ui, 则mainwindow.hmainwindow.cpp内容如下:

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include 
class MainWindow : public QMainWindow
{
   // 定义好的宏 Q_OBJECT, 所有需要“信号和槽”功能的组件都必须将 Q_OBJECT 作为 private 属性成员引入到类中
   Q_OBJECT
public:
   //带参的构造函数:QWidget 是所有组件的基类,借助 parent 指针,可以为当前窗口指定父窗口
   MainWindow(QWidget *parent = 0);
   // 无参构造函数
   ~MainWindow();
};
#endif // MAINWINDOW_H

//mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
  : QMainWindow(parent)
{
}
MainWindow::~MainWindow()
{
}

而创建项目时勾选创建 ui, 则mainwindow.hmainwindow.cpp内容如下:

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
   // 定义好的宏 Q_OBJECT, 所有需要“信号和槽”功能的组件都必须将 Q_OBJECT 作为 private 属性成员引入到类中
   Q_OBJECT

public:
    //带参的构造函数:QWidget 是所有组件的基类,借助 parent 指针,可以为当前窗口指定父窗口
   MainWindow(QWidget *parent = nullptr);
   // 无参构造函数
   ~MainWindow();

private:
   Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

//mainwindow.cpp
#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
  : QMainWindow(parent)
  , ui(new Ui::MainWindow)
{
   ui->setupUi(this);
}

MainWindow::~MainWindow()
{
   delete ui;
}

//mainwindow.ui

相比较上面的无 ui 的项目,多了 mainwindow.ui 的定义,其中mainwindow.ui是可以鼠标操作的ui设计窗口,

其代码部分如下, 代码部分不能直接编辑, 只能使用设计器修改.



MainWindow

 
  
   0
   0
   800
   600
  
 
 
  MainWindow
 
 
 
  
   
    0
    0
    800
    23
   
  
 
 




折叠代码我们得到如下:

从代码部分可获取如下信息:

  1. ui 标签 : 表示当前文件为 ui 的布局信息文件以及使用的版本
  2. class 标签 : 表示当前布局对应的类名 MainWindow
  3. widget 标签 : 表示一个 widget, 其中 class 为其类型QWindow, name 为其名称 MainWindow, 其包含了三个子 widget:
  4. QWidget
  5. QMenuBar
  6. QStatusBar
  7. property 标签 : 表示一个属性信息, 在MainWindow widget中,设置了 geometrywindowTitle 属性, 对应为 QMainWindow 父类的 QWidget 类的 geometry : QRect 和 windowTitle : QString
  8. resources 标签 : 表示引入的资源
  9. connections 标签 : 表示链接的内容

3. 总结

至此, QT创建的默认项目结构了解完毕

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表