首页 > 其他分享 >QtCreator通过CMake多文件编译.cpp、.qss、.h、.ui文件,达到MVC三层架构的效果

QtCreator通过CMake多文件编译.cpp、.qss、.h、.ui文件,达到MVC三层架构的效果

时间:2024-10-26 11:46:39浏览次数:11  
标签:文件 set CMake qss qttest3 ui include view

        博主在构建C++项目的时候,一般都喜欢将头文件和源文件分开为不同的文件夹,比如include目录下只存放.h文件和.ui文件,src目录下只存放.cpp和.qss文件,res目录下只存放图片、音频等文件,这时候使用CMake对项目进行分文件管理就特别方便和清晰了。

    很多人写qt项目的时候,就是一大堆文件全部杂糅在一个文件目录下面,非常杂乱,不易于管理。

        我们对项目进行分文件管理,整个项目结构就会清晰许多,比如下图所示。

        那么问题来了,这么复杂的分包管理,Cmake要怎么写呢,根目录下的cmake文件如下:

看起来目录复杂,实际上Cmake却无比简单。

cmake_minimum_required(VERSION 3.5) # CMake install : https://cmake.org/download/
project(qttest3 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_PREFIX_PATH "d:/c.app/QT6/6.6.2/mingw_64") # Qt Kit Dir
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 COMPONENTS Widgets REQUIRED) # Qt COMPONENTS
aux_source_directory(./src srcs)
aux_source_directory(./src/view views)
file(GLOB includes "include/view/*.h")
add_executable(${PROJECT_NAME}
    ${includes}
    ${srcs}
    ${views}
    res.qrc
)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Widgets) # Qt5 Shared Library

include目录下的view目录下的qttest3.h

//这个ui_qttest3.h文件的位置就是qttest3.ui文件的位置
#include "ui_qttest3.h"
#include <QMainWindow>

class qttest3 : public QMainWindow {
    Q_OBJECT
    
public:
    qttest3(QWidget* parent = nullptr);
    ~qttest3();

private:
    Ui_qttest3* ui;
};

qttest3.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>qttest3</class>
 <widget class="QMainWindow" name="qttest3">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>qttest3</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QListView" name="listView">
    <property name="geometry">
     <rect>
      <x>220</x>
      <y>120</y>
      <width>256</width>
      <height>192</height>
     </rect>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>250</x>
      <y>360</y>
      <width>75</width>
      <height>24</height>
     </rect>
    </property>
    <property name="text">
     <string>hello</string>
    </property>
   </widget>
   <widget class="QCheckBox" name="checkBox">
    <property name="geometry">
     <rect>
      <x>370</x>
      <y>360</y>
      <width>79</width>
      <height>20</height>
     </rect>
    </property>
    <property name="text">
     <string>CheckBox</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>17</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

src目录下的main.cpp

#include "../include/view/qttest3.h"
#include <QApplication>
#include <QFile>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile styleFile(":/src/view/qt.qss"); // 从资源文件中加载QSS文件
    styleFile.open(QFile::ReadOnly);
    QString styleSheet = QLatin1String(styleFile.readAll());
    qApp->setStyleSheet(styleSheet);
    qttest3 w;
    w.show();
    return a.exec();
}

对应src目录下的view目录下的qt.qss

/* 设置窗口背景颜色 */
QWidget {
    background-color: hsl(116, 92%, 48%);
}

/* 设置按钮样式 */
QPushButton {
    background-color: lightblue;
    border: 2px solid darkblue;
    border-radius: 5px;
    padding: 5px 10px;
    color: darkblue;
}

/* 鼠标悬停时按钮样式 */
QPushButton:hover {
    background-color: #00d0ff;
    color: white;
}

/* 鼠标按下时按钮样式 */
QPushButton:pressed {
    background-color: #8b0076;
}

将qt.qss加入到资源文件中,这里的路径才是main.cpp里面引用qss文件的路径。

对应src目录下的qttest3.cpp

#include "../../include/view/qttest3.h"

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

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

运行程序,这个项目目录是不是清晰很多了。

标签:文件,set,CMake,qss,qttest3,ui,include,view
From: https://blog.csdn.net/weixin_74027669/article/details/143251350

相关文章

  • cmake
    目录参考概述使用参考win10cmake下载:https://cmake.org/download/,make命令在mingw里,安装mingw即可,一般IDE会自带cmake和mingw,vscode需要安装插件文档:https://cmake.org/cmake/help/latest/index.html博客:https://subingwen.cn/cmake/CMake-primer/概述cmake是一个构建工具......
  • Centos7.x搭建FTP文件服务器
    ##参考网址https://blog.csdn.net/wqh0830/article/details/87743928#1、创建用户名并指定家目录,useradd-d/home/ftpuser-s/sbin/nologinftpuseruseradd-d/home/ftpuser-gumpay-s/sbin/nologinftpuser#-d-->更改用户的家目录为/home/ftpuse;此目录与数据目录保持一致#-......
  • DISM 支持使用无人值守文件(通常为 .xml 格式)来执行各种操作,特别是在部署和维护 Window
    DISM支持使用无人值守文件(通常为.xml格式)来执行各种操作,特别是在部署和维护Windows映像时。以下是一些可以与无人值守文件一起使用的DISM参数:1. /Apply-Unattend这个参数用于应用无人值守文件到Windows映像。可以在以下命令中使用:bashCopyCodeDism/Image:"C:\Path......
  • Windows下远程桌面进行【互传文件】
    1.开始-mstsc-远程桌面连接 2.远程连接-显示选项 3.显示选项-本地资源-选择详细信息 4.选择文件所在的磁盘选择后的磁盘位置可以在远程桌面和本地资源之间关联。两地可以相互拷贝文件。 配置后进行连接即可。 5.传输文件从本地复制文件,可以直接粘贴到......
  • Laravel开发:如何使用Laravel Excel处理Excel文件
    ​​在Laravel项目中,处理Excel文件通常是一项经常性的任务。本文将教你如何使用LaravelExcel扩展包进行Excel的导入、导出和操作:1.安装LaravelExcel扩展包;2.导入Excel数据到数据库;3.从数据库导出数据到Excel;4.操作Excel文件中的数据。首先,我们需要安装和配置LaravelExcel......
  • 在 PowerShell 中使用 dir | % { $_.CreationTime } 可以列出当前目录中所有文件和文
    在PowerShell中使用dir|%{$_.CreationTime}可以列出当前目录中所有文件和文件夹的创建时间。这里的%是ForEach-Object的简写,$_表示当前对象。如果你想要以更友好的格式输出这些创建时间,可以使用以下命令:powershellCopyCodedir|ForEach-Object{$_.CreationTi......
  • 文件上传
    检查:https://www.bugbountyhunter.com/guides/?type=fileuploads检查:https://portswigger.net/web-security/file-upload检查:https://hackerone.com/reports/506646在测试文件上传时,可能会发现文件已上传到第三方域,比如各种存储桶。但是有时公司会将DNS记录添加到指向其云......
  • 【slam】kitti数据集转化为rosbag文件的过程
    主要参考https://blog.csdn.net/m0_45388819/article/details/108582312rosbagtopic映射:https://blog.csdn.net/u014374826/article/details/139784531kitti官网:https://www.cvlibs.net/datasets/kitti/raw_data.php过程命令:kitti2bag-t2011_09_26-r0009raw_synced(......
  • C#对电脑系统文件管理
    在C#中,与电脑系统文件管理的交互通常通过.NET框架提供的System.IO命名空间下的类来完成。这些类提供了丰富的功能来读取、写入、删除、移动文件以及创建和管理文件夹。此外,获取和监控电脑系统信息则可能涉及到使用System.Environment、System.Diagnostics以及其他相关的.NET......
  • Windows11系统imkrudt.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个imkrudt.dll文件(挑选合适的版本文件)把它放......