当前位置: 首页 > news >正文

Qt-创建模块化.pri文件

文章目录

  • 一、.pri文件的作用与基本结构
    • 作用
    • 基本结构
  • 二、创建.pri文件
    • 如何添加模块代码?


一、.pri文件的作用与基本结构

作用

在Qt开发中,.pri文件(Project Include File)是一种配置包含文件,用于模块化管理和复用项目配置。以下是其核心要点:

模块化管理:将项目中公共的配置、源文件路径、编译选项等抽取到.pri文件中,避免在多个.pro文件中重复编写相同内容。
提高可维护性:通过分模块管理代码和配置,使项目结构清晰,便于团队协作和维护。
跨项目复用:可将常用配置(如第三方库路径、编译宏等)封装到.pri文件中,供多个项目共享。

基本结构

.pri文件的内容与.pro文件类似,包含变量定义、路径配置、文件列表等。常见指令示例:

# 设置头文件路径
INCLUDEPATH += $$PWD/include# 添加源文件和头文件
SOURCES += $$PWD/src/file1.cpp \$$PWD/src/file2.cpp
HEADERS += $$PWD/include/file1.h \$$PWD/include/file2.h# 定义预处理宏
DEFINES += MY_DEFINE_MACRO# 配置Qt模块
QT += core gui# 添加库文件路径
LIBS += -L$$PWD/libs -lmylib

与.pro文件的区别:
在这里插入图片描述

二、创建.pri文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里以鼠标拖动无边框窗口为例:

创建头文件和源文件:mouse.h 和 mouse.cpp
mouse.h:

#ifndef MOUSE_H
#define MOUSE_H
#include <QWidget>
#include <QMouseEvent>
#include <QPoint>
QT_BEGIN_NAMESPACE
namespace Ui {
class MouseWidget;
}
QT_END_NAMESPACEclass MouseWidget : public QWidget
{Q_OBJECTpublic:MouseWidget(QWidget *parent = nullptr);
private:Ui::MouseWidget *ui;
protected:void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);private:QPoint mOffset;//窗口移动,相对偏移位置
};
#endif // MOUSE_H

mouse.cpp

#include "mouse.h"
MouseWidget::MouseWidget(QWidget *parent): QWidget(parent)
{
}
//重写父类的虚函数
void MouseWidget::mousePressEvent(QMouseEvent *event)
{mOffset = event->globalPos() - this->pos();
}
void MouseWidget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - mOffset);
}

如何添加模块代码?

1、直接将代码剪切到common文件夹下,然后选择添加现有文件:
在这里插入图片描述
在这里插入图片描述
2、直接在工程目录中创建:
在这里插入图片描述

3、检查.pri文件,查看模块代码是否创建成功:

common.pri代码:
在项目引入mouse.h头文件时可能会出现:Error while building/deploying project helloworld (kit: Desktop Qt 5.6.2 MinGW 32bit) When executing step "make",这可能是项目找不到自定义的模块代码导致的。
解决办法:记得检查自己的.pri代码中有没有,INCLUDEPATH += $$PWD 和 DEPENDPATH += $$PWD,如果没有就手动添加,不然项目找不到自定义的模块代码。

INCLUDEPATH     += $$PWD
DEPENDPATH      += $$PWDHEADERS += \$$PWD/mouse.h
SOURCES += \$$PWD/mouse.cpp

创建成功就可以在项目中使用模块化代码了。

相关文章:

  • Windows BilibiliHistoryFetcher-v1.3.2-v1.2.1-开源B站历史记录管理工具[支持批量管理下载]
  • 01_Flask快速入门教程介绍
  • OneClicker脚本自动运行工具
  • 白嫖腾讯的H20!!!同时部署RVC模型
  • 堡垒机和跳板机之区别(The Difference between Fortress and Springboard Aircraft)
  • 一文详解卷积神经网络中的卷积层和池化层原理 !!
  • 量化交易 - RSRS(阻力支撑相对强度)- 正确用法 - 年均收益18%
  • 进行ecovadis认证有哪些优势?百胜咨询:专业ecovadis认证辅导机构
  • Java并发:线程池
  • 车载软件架构 --- 二级boot设计说明需求规范
  • 阻塞队列-ArrayBlockingQueue
  • C++算法(11):vector作为函数参数的三种传递方式详解
  • Mininet--nodelib.py源码解析
  • Fluent 内置双向流固耦合FSI 液舱晃荡仿真计算
  • Vue的模板语法——指令语法
  • Discuz!与DeepSeek的深度融合:打造智能网址导航新标杆
  • 测试基础笔记第八天
  • 如何解决Enovia许可冲突
  • 抱佛脚之学SSM三
  • Linux操作系统--进程等待
  • 支持医企协同创新研究,上海已设立一系列产学研医融合项目
  • 人民日报:各地扎实开展学习教育,一体推进学查改
  • 春山谷雨前,并手摘芳烟
  • 两名中国公民在墨尔本被海浪卷走,我领馆发文提醒
  • 考艾的森林与雾气中,艺术在生长
  • 夜读丨石头比月光温柔