Qt资源文件的格式,并用CMake添加Qt资源文件 您所在的位置:网站首页 从成都开车到西双版纳要几个小时 Qt资源文件的格式,并用CMake添加Qt资源文件

Qt资源文件的格式,并用CMake添加Qt资源文件

2022-05-04 21:58| 来源: 网络整理| 查看: 265

目录......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文件

 # 这个和下面的中间填写资源     # 这个 和下面的中间填写资源文件路径(相对路径)        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文件文件名自己随便取            images/mainPic.jpg        images/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---

----------------------------------------------------------------------------------------------------------------------我们尊重原创,也注重分享,文章来源于微信公众号:MatlabGUI QtCPP等学习记录,建议关注公众号查看原文。如若侵权请联系[email protected]。----------------------------------------------------------------------------------------------------------------------



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有