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

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

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

http://www.xdnf.cn/news/899.html

相关文章:

  • Feign和Dubbo的技术选型对比分析
  • RK3588上编译opencv 及基于c++实现图像的读入
  • leetcode149.直线上最多的点数
  • 论文阅读HARIVO: Harnessing Text-to-Image Models for Video Generation
  • 在线查看网站免费工具 wps, dps, et, ett, wpt 文件格式
  • 【LeetCode】1.两数之和
  • 关于springmvc的404问题的一种猜测解决方案
  • Unity接入安卓SDK(2)接入方式
  • class com.alibaba.fastjson.JSONObject cannot be cast to class
  • Docker 镜像、容器和 Docker Compose的区别
  • 使用PyTorch实现图像增广与模型训练实战
  • 版本控制利器——SVN简介
  • SVN权限配置及连接指南
  • 年化112.5%,最大回撤24.3%,卡玛比率4.62 | polars因子引擎重构完成(python源代码下载)
  • android的 framework 有哪些知识点和应用场景
  • 如何修复WordPress中“您所关注的链接已过期”的错误
  • uniapp打ios包
  • Spark_SQL
  • 第十四届蓝桥杯 2023 C/C++组 有奖问答
  • 算法 | 鲸鱼优化算法(WOA)原理,公式,应用,算法改进研究综述,完整matlab代码
  • 集成学习实际案例
  • 如何在量子计算时代保障 Sui 的安全性
  • C++模板进阶
  • 5.2.1 CallerMemberName的使用
  • Java 服务器端 jar 包内 class 文件替换与配置文件修改高级技术指南
  • SQL 使用 UPDATE FROM 语法进行更新
  • C++回溯算法详解
  • 在线查看【免费】vsd, vsdx/wmf, emf /psd, eps/pdf ,ofd, rtf/xmind/bpmn/eml/epub文件格式网
  • Elasticsearch插件:IDEA中的Elasticsearch开发利器
  • 【Unity笔记】Unity音视频播放监听器封装笔记:VideoPlayer + AudioSource事件触发与编辑器扩展