본문 바로가기
코딩취미/Python

이미지 파일 및 resource 관리를 위한 qrc 사용 방법

by 브링블링 2024. 5. 2.
728x90

이미지 파일 및 resource 관리를 위한 qrc 사용 방법

QRC 파일은 일반적으로 Qt 프레임워크에서 사용되는 리소스 파일입니다. Qt는 C++를 기반으로 한 크로스 플랫폼 개발 도구로, GUI 개발뿐만 아니라 다양한 개발 요구를 충족합니다. QRC 파일은 이 프레임워크에서 리소스(이미지, 아이콘, 번역 파일 등)를 관리하는데 사용되는 XML 형식의 파일입니다. 이 파일을 통해 개발자는 소스 코드 내에서 직접 파일 경로를 지정하지 않고도 필요한 리소스를 효율적으로 불러올 수 있습니다. 그리고  이 방법은 이미지 파일을 프로그램 코드에 직접 통합하여 배포 시에도 파일 경로 문제 없이 이미지를 사용할 수 있게 해 줍니다.  

 

QRC 파일의 사용 목적과 이유

  1. 통합 리소스 관리: 프로젝트의 모든 리소스를 하나의 파일에서 관리할 수 있어, 리소스의 추가, 수정, 삭제가 용이합니다.
  2. 이식성: 리소스 경로가 하드코딩되지 않기 때문에, 프로젝트를 다른 환경으로 옮기거나 배포할 때 경로 문제가 발생하지 않습니다.
  3. 성능 최적화: QRC 시스템은 필요한 리소스를 빠르게 로드할 수 있도록 최적화되어 있습니다.
  4. 안정성: 리소스가 소스 코드에 직접 포함되어 있기 때문에, 외부에서 리소스가 변경되거나 손상될 위험이 줄어듭니다.

QRC 파일의 사용 방법

QRC 파일을 사용하기 위해선 먼저 XML 형식으로 리소스를 정의해야 합니다. 

728x90

1. 리소스 파일 생성

  1. 리소스 파일(.qrc) 작성: 이미지와 같은 리소스를 관리하기 위한 XML 형식의 .qrc 파일을 작성합니다. 이 파일은 어떤 리소스가 프로젝트에 포함되어야 하는지 Qt에 알려줍니다.
  2. 예를 들어, images라는 폴더에 logo.png 이미지가 있다고 가정하면, 리소스 파일은 다음과 같이 작성할 수 있습니다.

( 이 XML 파일은 resources.qrc와 같은 이름으로 저장합니다.)

<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
    <file>images/logo.png</file>
</qresource>
</RCC>

 

2. 리소스 파일 컴파일

  1. 리소스 파일을 Python 코드로 변환: PySide6는 리소스 파일을 Python 코드로 변환할 수 있는 pyside6-rcc 명령을 제공합니다. 커맨드 라인(명령 프롬프트나 터미널)에서 다음 명령을 실행합니다.

이 명령은 resources.qrc 파일을 읽어서 Python 모듈 resources_rc.py로 변환합니다.

pyside6-rcc resources.qrc -o resources_rc.py

 

* pyQt를 사용하는 경우

pyrcc5 resources.qrc -o resources_rc.py

 

* c++에서 사용하는 경우 : Qt 프로젝트 설정 파일(.pro)에 다음을 추가하여 QRC 파일을 컴파일합니다.

RESOURCES += resources.qrc

3. 변환된 리소스 모듈 사용

  1. 리소스 모듈 사용: 변환된 Python 모듈을 프로젝트에서 불러와 사용합니다. 이미지를 로드하려면, Qt의 이미지 로딩 메커니즘을 사용하여 리소스 경로를 지정합니다.

이 코드는 QIcon 객체를 생성할 때 리소스 파일 내의 이미지 경로를 참조합니다. 경로 앞에 :를 붙여 Qt 리소스 시스템에서 파일을 찾을 수 있도록 합니다.

from PySide6.QtGui import QIcon
import resources_rc  # 변환된 리소스 파일 불러오기

icon = QIcon(":/images/logo.png")

 

* c++ 코드에서 사용하는 경우

#include <QApplication>
#include <QIcon>
#include <QPushButton>

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

    QPushButton button;
    button.setIcon(QIcon(":/images/logo.png"));
    button.show();

    return app.exec();
}

4. 리소스 사용 예

  1. GUI에 리소스 적용: 예를 들어, PySide6에서 버튼에 아이콘을 설정하는 방법은 다음과 같습니다.

이 과정을 통해 이미지와 같은 리소스를 코드 내부에서 직접 관리하고 접근할 수 있으며, 이는 애플리케이션의 이식성과 관리 효율성을 높여줍니다.

from PySide6.QtWidgets import QApplication, QPushButton

app = QApplication([])
button = QPushButton("Press Me")
button.setIcon(QIcon(":/images/logo.png"))
button.show()

app.exec()

 

 

** 변환결과 : qrc -> py

728x90