目录

......QRC文件的写法用CMake添加Qt资源文件添加QRC文件的函数步骤CPP中使用QRC文件使用QRC文件实例程序结果QRC文件CMakeLists.txt文件Dialog.h文件Dialog.cpp文件main.cpp文件

......

因为开题,荒废了一个多月没学习,感觉除了对MATLAB还有点印象,C++/Qt基本都忘得差不多了。前天开题完了,准备从头重新复习一下。

上午折腾了两小时的用CMake添加Qt资源文件的问题。主要是:'Unknown CMake command "QT5_ADD_RESOURCES"'这个error,我脑袋一时短路没整明白,折腾两小时后才解决,于是做篇推送记录一下。

其实之前也没用过资源文件,都是把图片或者文件放在文件夹中跟exe程序放一块来调用。不过既然是复习,就一块学了吧。qt的资源文件还是很好用的,直接把资源文件编译到exe程序里了,不用附加了,比较清爽。不过比较大的文件还是不要放到QRC里了,一般都是放点图片啥的。

还有,这是我写的最快的一次推送,差不多一个小时把。

QRC文件的写法

RCC>  # 这个是文件头,用来说明是一个RCC文件

 # 这个和下面的中间填写资源 # 这个 和下面的中间填写资源文件路径(相对路径)images/mainPic.jpg # 相对路径要包含在和中间images/icon.png

如图:

资源文件写好了,下面就要添加了。

用CMake添加Qt资源文件

添加QRC文件的函数

  • qt5_add_resources

步骤

  • set(CMAKE_AUTORCC ON),这个要先写上

  • set(QRC_FILE resource.qrc)

  • qt5_add_resources(QRC ${QRC})

具体的解释看下面的注释吧(左右滑动)

set(CMAKE_AUTORCC ON) # 这个要写上

set(QRC_FILE resource.qrc) # 可能有多个QRC文件,我这里就写了一个,这行是把所有的QRC文件名赋值给 QRC_FILE变量(变量名自己取)

qt5_add_resources(QRC ${QRC_FILE}) # 用这个函数把这些QRC文件添加进来

# QRC文件需要参与编译,所以在add_library和add_executable中可能都需要添加(如果你在库或者主程序中使用了QRC资源的话),比如:add_executable(20 main.cpp Dialog.cpp Dialog.h ${QRC}) # 记得把资源文件也参与编译!

Note: 你可能会出现:Unknown CMake command "QT5_ADD_RESOURCES" 这样的错误!
这是因为你在使qt5_add_resources这个函数之前没有使用find_package来导入Qt5的库,qt5_add_resources是Qt5的CMake文件中的函数。所以你必须要先用find_package来导入QT5的包,然后才能使用qt5_add_resources来添加资源文件。

CPP中使用QRC文件

this->setWindowIcon(QPixmap(":/images/icon.png"));mainPic->setPixmap(QPixmap(":/images/mainPic.jpg"));

就这样用,:/ + 在QRC文件中写的相对路径

下面举一个使用QRC文件的例子

使用QRC文件实例

首先,我把qrc文件和包含图片的文件夹与主CMakeLists.txt文件放在同一级目录中,那么这个资源图片的相对路径就是: images/xxx.png

关于项目结构就不具体描述了,之前也写了一篇CMake的推送,那里面有说。

程序结果

QRC文件

文件名自己随便取

RCC>"1.0">images/mainPic.jpgimages/icon.png

CMakeLists.txt文件

cmake_minimum_required(VERSION 3.10)project(20)

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)

## 一定要在使用 qt5_add_resources前调用find_package.因为你需要先导入Qt5的库后才会有qt5_add_resources这个函数。## qt5_add_resources这个函数是在qt5的CMakeLists.txt的库中。所以以后还是在开头导入库为好。set(Qt5_DIR "C:\\Qt\\Qt5_12_MSVC\\lib\\cmake\\Qt5") # Windows中find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)

# 添加资源文件(添加好的资源要参与编译,所以add_library和add_executable中都可能需要加)set(QRC_FILE resource.qrc)qt5_add_resources(QRC ${QRC_FILE})

add_executable(20 main.cpp Dialog.cpp Dialog.h ${QRC}) # 记得把资源文件也参与编译!

target_link_libraries(20 PUBLIC Qt5::Core Qt5::Gui Qt5::Widgets)

Dialog.h文件

//// Created by MitchHong on 2020/7/4.//

#include #include #include #include #include 

class Dialog : public QDialog{    Q_OBJECT

public:    explicit Dialog(QWidget* parent = nullptr);//    ~Dialog() Q_DECL_OVERRIDE = default;

private:    QLabel* mainPic;       //主显示图片    QPushButton* closeBtn; //关闭按钮

private:    void setupDialog();    void setupConnections();};

Dialog.cpp文件

在这里使用QRC资源文件!

//// Created by MitchHong on 2020/7/4.//

#include "Dialog.h"

Dialog::Dialog(QWidget* parent): QDialog(parent),  mainPic(new QLabel),  closeBtn(new QPushButton("Close")){    setupDialog();    setupConnections();}

void Dialog::setupDialog(){    this->setFixedSize(500, 500);    this->setWindowIcon(QPixmap(":/images/icon.png"));    mainPic->setPixmap(QPixmap(":/images/mainPic.jpg"));    mainPic->setScaledContents(true);

    auto* lay = new QVBoxLayout;    lay->addWidget(mainPic);

    auto* lay1 = new QHBoxLayout;    lay1->addStretch(1);    lay1->addWidget(closeBtn);    lay->addLayout(lay1);

    this->setLayout(lay);}

void Dialog::setupConnections(){    connect(closeBtn, &QPushButton::clicked,            this, [this]()->void{        this->close();    });}

main.cpp文件

#include #include "Dialog.h"

int main(int argc, char* argv[]) {    QApplication app(argc, argv);

    Dialog w;

    w.show();

    return QApplication::exec();}

---END---

opengl png图片 qt_Qt资源文件的格式,并用CMake添加Qt资源文件相关推荐

  1. word转pdf图片模糊怎么办_嗨格式PDF转换器如何将PDF文件转换成Word?PDF转Word方法...

    日常办公,我们有时候需要将PDF文件格式进行转换,鉴于PDF文件的特殊性,这就需要借助专业软件,例如嗨格式PDF转换器.嗨格式PDF转换器支持PDF.Word.Excel.PPT.图片等多种文件格式互 ...

  2. opengl png图片 qt_QT中使用OpenGL绘图

    在之前说道过VS2010中配合OpenGL绘图的问题,这回是想要说说在QT中使用OpenGL,其实两者并无太大区别,因为都是基于C++语言的. 主要是想简要介绍下OpenGL在QT中的使用方法跟一些错 ...

  3. opengl png图片 qt_Qt翻页效果实现(四):OpenGL图像渲染

    OpenGL贴图 OpenGL里面的图像渲染,是通过将图片映射成纹理,然后通过顶点坐标和对应的纹理坐标映射到物体表面. 顶点坐标 这里我们只有三个屏平面,在Qt翻页效果实现(二)文章中各点的坐标,在O ...

  4. opengl png图片 qt_Qt学习:三维绘图之OpenGL和Qt的结合(转)

    OpenGL是绘制三维图形的标准API.Qt应用程序可以使用QtOpenGL模块绘制三维图形,该模块依赖于系统的OpenGL库.Qt OpenGL模块提供QGLWidget类,可以通过对它子类化,并使 ...

  5. [matlab编程实践].cli文件二进制格式读取【3D打印切片文件】

    文章目录 零.cli文件简介 0.0 cli文件说明文档 0.1 下面是我们这使用的3D打印机的流程. 0.2 cli文件格式 0.3 cli文件结构 0.4 几何数据部分详解 一.matlab 程序 ...

  6. android framework资源,android源码framework下添加新资源的方法

    编译带有资源的jar包,需要更改frameworks层,方法如下: 一.增加png类型的图片资源 1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/re ...

  7. linux开发板添加qt库文件_QT程序怎么移植到开发板并运行

    需要的条件: 1.上位机编译好的可执行文件,以hello为例 在虚拟机的Ubuntu下,写好代码之后,定位到当前目录,执行命令 $ qmake -project //生成工程文件.pro $ qmak ...

  8. CMake添加不同目录文件的方法

    三种使用CMake构建工程添加子目录的方法 文件目录结构 . ├── CMakeLists.txt ├── inc │ ├── ansi_def.h │ ├── ansi.h │ ├── ansi_p ...

  9. php 显示要上传的图片格式,php判断文件上传图片格式的实例详解

    php判断文件上传图片格式的实例详解 判断文件图片类型, $type = $_FILES['image']['tmp_name'];//文件名 //$type = $this->getImage ...

最新文章

  1. Spring整合Hibernate图文步骤
  2. java高并发(九)线程封闭
  3. 《大型网站技术架构:核心原理与案例分析》-- 读书笔记 (2) : 大型网站核心架构要素(1) -- 性能...
  4. python wrapper_Python functools之partial, update_wrapper, wraps
  5. Hive之 hive的三种使用方式(CLI、HWI、Thrift)
  6. 万万没想到 Java 中最重要的关键字竟然是这个!
  7. Pixelmetrix :OTT Media Grinder (OTT TV 质量评价设备)
  8. NYOJ455 - 黑色帽子
  9. 培华学院2012届计算机专业多少人,西安培华学院学子在中国大学生计算机设计大赛中取得多个国奖...
  10. 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
  11. bzoj 1019: [SHOI2008]汉诺塔
  12. adb.exe可能被其他程序关闭_苹果说关闭后台 反而会缩短电池寿命?!
  13. win10用账户登录计算机,Win10没有改用本地账户登录选项的解决方案
  14. discuz招商加盟门户整站模板
  15. linux怎么让cpu不自动降频,Win10 CPU自动降频怎么办?Win10下让CPU不降频设置方法
  16. 固态变 SATAFIRM S11
  17. Python优雅地生成拼图效果
  18. redis击穿,穿透,雪崩以及解决方案
  19. 学习笔记-Windows 安全
  20. 8月收到的最新更新附近的人交友系统源码,自动打招呼,自动发视频通话+自动聊天多功能机器人交友源码

热门文章

  1. CPU可以跑多快?地球到火星的距离告诉你!
  2. 好机会,我要帮女同事解决Maven冲突问题
  3. mysql索引类型normal,unique,full text
  4. 【开发技巧】解决微信author2.0回调内网本地问题
  5. JEEWX微信开发更便捷,Ngrok 内网穿透利器应用
  6. Java容器 | 基于源码分析Map集合体系
  7. Unity插件扩展中组件常用的几个方法
  8. Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 359404 bytes) in
  9. CAReplicatorLayer复制Layer和动画, 实现神奇的效果
  10. 计算一段代码执行完毕用时问题