Qt응용프로그램을 개발할 때 사용되는 리소스(이미지, qml, 폰트등)를 바이너리로 형태로 만드는 방법을 설명한다.
Qt의 리소스 시스템은 qmake와 rcc를 기반으로 Resource Collection Files 이라고 불리는 XML 기반 파일 형식인 qrc에 포함된 리소스를 사용할 수 있게 해준다. qrc파일은 일반적으로 아래처럼 작성된다.
<RCC>
<qresource prefix="/qml">
<file>myqml.qml</file>
</qresource>
<qresource prefix="/image">
<file>logo.png</file>
</qresource>
<qresource prefix="/font">
<file>NanumGothic-Regular.ttf</file>
</qresource>
</RCC>
보통은 QtCreator에서 Qt Quick Application 프로젝트를 생성하면 .qrc파일이 포함된다.
이 qrc파일이 프로젝트파일(.pro)에 포함되면 리소스는 응용프로그램과 같이 컴파일 된다. 이 경우 리소스가 응용프로그램에 포함되므로 별도의 파일로 배포하고 싶지 않을 때 유용한 방법이다.
rcc를 사용해서 리소스 파일만 별도의 바이너리 형태로 만들 수 도 있다.
예를 들어 위의 resource.qrc파일을 아래와 같이 rcc를 -binary 옵션으로 rcc파일을 만든다. (rcc는 Qt가 설치된 곳에 있다.)
만들어진 rcc파일을 아래의 예제처럼 사용한다.
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QResource>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QResource::registerResource(qApp->applicationDirPath() + "/resource.rcc");
const QUrl url(QStringLiteral("qrc:/qml/myqml.qml"));
engine.load(url);
return app.exec();
}
다음은 QML에서 prefix를 붙여 리소스에 엑세스하는 방법을 보여준다.
myqml.qml
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
FontLoader{
id: myfont
source: "qrc:/font/NanumGothic-Regular.ttf"
}
Image {
id: logo
anchors.centerIn: parent
source: "qrc:/image/logo.png"
}
Text {
id: text
text: "나눔고딕폰트"
font.family: myfont.name
font.pixelSize: 12
anchors.horizontalCenter: parent.horizontalCenter
}
}