그 대표적인 예가 어플리케이션에서 이용하는 아이콘들입니다.
이번 회에서는 어플리케이션과 액션에 아이콘을 적용해보고, Qt의 리소스에 대해서 알아보겠습니다.
texteditor.tar.gz예제 파일
[code]
...
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), d(new Data) {
...
setWindowIcon(QIcon("img/document-edit.png"));
d->newFileAction->setIcon(QIcon(":/img/document-new.png"));
}
[/code]
그리고 소스코드와 같은 위치에 다음과 같은 내용의 resources.qrc 파일을 작성합니다.
[code]
<RCC>
<qresource prefix="/" >
<file>img/document-new.png</file>
</qresource>
</RCC>
[/code]
마지막으로 texteditor.pro파일에 다음 한줄을 추가합니다.
[code]
RESOURCES += resources.qrc
[/code]
먼저 mainwindow.cpp의 추가된 라인을 살펴보겠습니다. setWindowIcon()이라는 함수가 호출되고 있는데, 이것은 QWidget::setWindowIcon()으로, 모든 위젯이 가지고 있는 함수입니다.
이를 이용하여 해당 위젯이 최상위 위젯일때 표시되는 아이콘을 지정할 수 있습니다.
이 함수는 QIcon의 객체를 인자로 받는데, QIcon은 딱 보면 알수 있듯이 아이콘에 대한 클래스입니다.
가장 간단한 사용방법은, 위와 같이 QIcon(이미지파일 경로)와 같이 생성하는 것입니다.
이미지 경로가 img/document-edit.png로 되어있는데, 이것은 작업경로에 대한 상대경로로, 당연히 절대경로도 가능합니다.
첨부된 예제소스를 받아보면, 소스코드가 있는곳에 img라는 디렉토리가 추가되어있고 그 안에 이미지 파일이 들어있는 것을 확인 할수 있습니다. 현재는 소스코드가 있는 곳에서 빌드하고 실행하기 때문에, 이 경로로 이미지의 위치를 제대로 인식하지만, 만약 실행파일이 다른 곳으로 옮겨지는등 작업경로가 변경되면 이미지를 인식 할 수 없게됩니다.
또한 실제 배포시에는 이미지를 각 시스템에 맞게 별도로 제공해야 할 수도 있습니다.
그럼 절대 경로를 이용하면 되지 않느냐? 라고 생각 할수도 있겠지만, 이경우는 배포시의 경로를 강제해야 하고, 이것은 합리적이지 못합니다.
이럴 때, '리소스'를 이용할 수 있습니다.
Qt의 리소스 시스템이란, 바이너리 파일을 실행파일에 포함시켜버리는 것을 말합니다.
즉, 애시당초 이미지를 별도로 다루지 않고, 실행파일에 붙여버리는 것입니다.
이러면 배포할때 이미지 경로를 신경쓰지 않아도 될 뿐만 아니라, 실행파일과 이미지를 함께 배포해야 하는 수고를 덜수 있습니다.
리소스로 이용하고 싶은 파일들은 위에 적은 resources.qrc파일처럼 형식에 맞게 목록을 작성하여 qrc의 확장자로 목록을 저장한후, texteditor.pro파일 처럼 프로필 파일에 'RESOURCES += 리소스 목록 파일'과 같이 리소스 목록 파일을 지정해주어야 합니다.
qrc파일의 형식은 매우 간단하므로 별도 설명은 하지 않습니다. 좀더 다양한 활용법에 대해서는 assistant를 참고하시기 바랍니다.
생성자에 추가된 마지막 줄은 이 리소스 파일로부터 아이콘을 만들고 있는 코드입니다.
QIcon의 생성자로 넘긴 이미지 파일의 경로를 보면 :/ 로 시작하고 있습니다. :/로 시작하는 경로는 리소스 파일에 대한 경로입니다. 이와 같이 리소스로 추가된 파일을, 실제 소스코드내에서 불러올때는 반드시 :로 시작하는 경로를 입력해야 합니다. /는 리소스 목록 파일에서 prefix로 지정된 경로로, 만약 prefix="/rsc"와 같이 지정했었다면 :/img/document-new.png가 아니라 :/rsc/img/document-new.png 와 같이 해야 할 것입니다.
QAction::setIcon()함수는 해당 액션에 아이콘을 지정하는 함수입니다. 액션의 아이콘은, 다음과 같은 역할을 합니다.
1. 툴바에 표시된 액션의 아이콘
2. 메뉴에 표시된 액션의 아이콘
이리하여 실행해보면 두가지 아이콘이 적용된 모습을 볼 수 있습니다.

실행화면
예를 들면 소스코드에 직접 적어 넣기 힘든 문서내용을, 텍스트파일로 저장하여 불러올수 있습니다.
혹은 특정 동작에 대한 소리를 리소스로 집어 넣을 수도 있습니다.




















