어느새 방학도 끝나고 4학년이 되어 연구실 배정까지 끝났습니다.
어떻게 본격적으로 시작하기 전에 CMPlayer도 마이너 버전업이 가능했고...
학교 다니면서 여유가 있을지 없을지 모르기에, CMPlayer는 일단 여기서 일단락 짓고, 당분간은 0.3.x에서 버그패치나 하게 될듯합니다.
사실 GStreamer용 재생엔진을 이전부터 준비해왔었는데, 아무래도 GStreamer는 버그가 너무 많아서 이쪽은 당분간 접을 듯합니다.
거의 반년전부터 준비해온 것이라 만든게 아까워서라도 어떻게 해볼려고 했는데, 좀더 GStreamer가 안정적으로 작동하게 될때로 미루어야겠습니다.
대신 VLC를 이용해볼까 해서 이리저리 보고는 있는데 어떻게 될지 모르곘네요.
연구실은 들어갔지만 아직 연구 테마는 정해지지 않았습니다.
대충 생각하고 있는 것은 있지만 좀더 선생님과 상담을 해보고 결정해야겠지요.
뭐 사실상 1학기는 '공부'가 중점이기 떄문에 어쩌면 2학기가 되고서야 결정하게 될지도 모르겠습니다.
4월도 어느덧 하순에 들어가고, 다른 동네는 벚꽃도 지고 있지만, 이동네는 아직 피지도 않았습니다.
기온도 아직 아침 밤으로는 꽤 쌀쌀하네요.
그래도 이불은 살짝 얇은 이불로 바꿨습니다. 그래도 솜이불이지만요.
그나저나 거의 수업이 없거나 오후에나 있다보니 방학이 끝났음에도 불구하고 아직도 주침야활의 생활에서 벗어나지 못하고 있습니다.
오늘은 주침을 생략하고 야침을 할 수 있도록 노력해보겠지만 어떻게 될지 모르겠네요.
글 검색 결과
- 2009/04/19 근황
- 2009/04/15 Qt에 대하여 - 12. 실전! - 텍스트 에디터(3) : 리소스 (4)
- 2009/04/10 CMPlayer 0.3.0 릴리즈 (8)
Qt에 대하여 - 12. 실전! - 텍스트 에디터(3) : 리소스
실제로 어플리케이션을 만들다보면, 모든 것이 소스코드만으로 해결되지 않는 경우가 많습니다.
그 대표적인 예가 어플리케이션에서 이용하는 아이콘들입니다.
이번 회에서는 어플리케이션과 액션에 아이콘을 적용해보고, Qt의 리소스에 대해서 알아보겠습니다.
texteditor.tar.gz이번회에서는 mainwindow.cpp에 다음 두줄을 생성자의 마지막에 추가합니다.
[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. 메뉴에 표시된 액션의 아이콘
이리하여 실행해보면 두가지 아이콘이 적용된 모습을 볼 수 있습니다.
이번회에서는 리소스의 예로 이미지 파일을 들었지만, 그외에도 여러가지 활용법이 있습니다.
예를 들면 소스코드에 직접 적어 넣기 힘든 문서내용을, 텍스트파일로 저장하여 불러올수 있습니다.
혹은 특정 동작에 대한 소리를 리소스로 집어 넣을 수도 있습니다.
그 대표적인 예가 어플리케이션에서 이용하는 아이콘들입니다.
이번 회에서는 어플리케이션과 액션에 아이콘을 적용해보고, 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. 메뉴에 표시된 액션의 아이콘
이리하여 실행해보면 두가지 아이콘이 적용된 모습을 볼 수 있습니다.

실행화면
예를 들면 소스코드에 직접 적어 넣기 힘든 문서내용을, 텍스트파일로 저장하여 불러올수 있습니다.
혹은 특정 동작에 대한 소리를 리소스로 집어 넣을 수도 있습니다.
icon,
QIcon,
qrc,
Qt,
resource,
리소스,
아이콘
- 이 글의 트랙백 주소
- http://xylosper.net/trackback/132
-
- sparkstar @ 2009/04/19 03:33
-

-
드디어 업데이트 된건가요? 오랜만에 쓰신듯;
쭉쭉 연재해주세용~
add
- 댓글 남기기
CMPlayer 0.3.0 릴리즈
CMPlayer 0.3.0버전을 릴리즈하였습니다.
0.2.5이후부터 재생 엔진을 통합하여 CMPlayer는 현재 '다양한 재생엔진을 지원하는 엔드 유저를 위한 리눅스용 멀티미디어 플레이어'라는 컨셉으로 개발하고 있습니다.
다음 페이지에서 다운로드 할 수 있습니다.
http://kldp.net/frs/?group_id=1243
CMPlayer로는 다음과 같은 것들이 가능합니다.
* 다양한 재생엔진의 지원(현재 MPlayer와 xine 이용가능, 차후 GStreamer 지원 예정)
* 파일/URL/DVD 재생 지원
* DVD 메뉴 지원(xine only)
* 화면 크기/종횡비 설정 및 잘라내기 지원
* 스냅샷 지원
* 재생 속도 변경 가능
* 복수의 오디오 스트림을 포함한 미디어 지원
* 파일명으로부터 재생목록 자동 생성
* 단일 어플리케이션 지원
* 시스템 트레이 아이콘 지원
* 최소화 및 복귀시 자동 일시정지 및 자동 재생 시작
* 재생중 화면 보호기 끄기
* 구간 반복 기능
* 상하단 여백 존재시 자동으로 자막 출력위치가 조절됨
* Sami(smi), SubRip(srt), MicroDVD, TMPlayer 자막 포맷 지원
* 통합 자막지원
* 포맷에 상관없이 복수의 자막들의 동시 표시 가능
* 자막 인코딩 자동 탐지(libchardet 이용)
* SAMI포맷의 컬러 자막 지원(xine only)
* 전 메뉴 단축키 설정 가능
* 마우스 조작으로 동작 설정 가능
이외에도 여러가지 편리한 기능이 포함되어있습니다.
0.2.5이후부터 재생 엔진을 통합하여 CMPlayer는 현재 '다양한 재생엔진을 지원하는 엔드 유저를 위한 리눅스용 멀티미디어 플레이어'라는 컨셉으로 개발하고 있습니다.

CMPlayer 0.3.0
http://kldp.net/frs/?group_id=1243
CMPlayer로는 다음과 같은 것들이 가능합니다.
* 다양한 재생엔진의 지원(현재 MPlayer와 xine 이용가능, 차후 GStreamer 지원 예정)
* 파일/URL/DVD 재생 지원
* DVD 메뉴 지원(xine only)
* 화면 크기/종횡비 설정 및 잘라내기 지원
* 스냅샷 지원
* 재생 속도 변경 가능
* 복수의 오디오 스트림을 포함한 미디어 지원
* 파일명으로부터 재생목록 자동 생성
* 단일 어플리케이션 지원
* 시스템 트레이 아이콘 지원
* 최소화 및 복귀시 자동 일시정지 및 자동 재생 시작
* 재생중 화면 보호기 끄기
* 구간 반복 기능
* 상하단 여백 존재시 자동으로 자막 출력위치가 조절됨
* Sami(smi), SubRip(srt), MicroDVD, TMPlayer 자막 포맷 지원
* 통합 자막지원
* 포맷에 상관없이 복수의 자막들의 동시 표시 가능
* 자막 인코딩 자동 탐지(libchardet 이용)
* SAMI포맷의 컬러 자막 지원(xine only)
* 전 메뉴 단축키 설정 가능
* 마우스 조작으로 동작 설정 가능
이외에도 여러가지 편리한 기능이 포함되어있습니다.
CMPlayer,
동영상,
동영상플레이어,
리눅스,
멀티미디어
- 이 글의 트랙백 주소
- http://xylosper.net/trackback/131
-
- 아기곰 @ 2009/08/01 20:03
-

-
사실 제 시스템에서 gl 가속을 넣고 재생을 하면 재생자체가 안되고 xv 나 씨퓨 가속으로 넣으면 이상하게 재생이 되고 화면이 이상하게 나오는겁니다.
영문 mplayer 이구요.
smplayer 하고 mplayer 에서는 되는데 왜 cmplayer 에서는 이상하게 안될까요 ㅡㅡ? 어쨋거나 자막이나 이런거 관련은 매우 편리합니다.
그런데 신기한것은 윈도우즈용 kmplayer 은 외부 코덱 가져오기가 가능한데 왜 리눅스용은 그렇게 쉽게 되지 않을까요 ㅡㅡ?
Dshowserver 같은것을 패치하면 가능할듯도 한데 말입니다. ( 재생엔진에 )-

- xylosper @ 2009/09/08 10:22
-

-
백엔드로의 mplayer는 다루기가 쉬우면서도 어렵습니다.
그냥 동영상 좀 틀어주는 거라면 쉬운데, 여러가지 복잡한 상황을 고려할려고 하면, 라이브러리가 아니기 때문에 제 뜻대로 다루기가 곤란합니다.
그리고 제가 우선 mplayer를 안쓰기 때문에 테스트가 부족하기도 하다고 생각합니다.
당분간은 mplayer도 지원하겠지만, 현재 계획하고있는 vlc 플러그인이 추가되면 mplayer는 빼버릴 듯합니다.
사실 cmplayer는 사용하기 쉽게는 목적이지만 가볍게 하기에는 제 실력이 부족하기 때문에 어차피 mplayer의 가벼움은 살리지 못한다고 생각합니다.
그리고 mplayer에는 smplayer라는 좋은 프론트 엔드도 존재하구요...전 cmplayer가 더 좋다고 생각하지만요=_=;;
외부 코덱의 경우는 개인적으로는 라이센스가 가장 큰 걸림돌이 되지 않을까 합니다.
오픈소스가 아닌 외부코덱은 GPL과 링크 자체가 불가능한 경우도 많으니까요.
-
-
- 방랑자 @ 2009/09/23 07:49
-

-
우분투 8.04 64bit LTS입니다. QT4 library는 다설치했는데요..
지금 바이너리로 실행할려구하는데 자꾸 에러가나오는데 제가
뉴비라 무엇이 문제인지 잘모르겠네요...
/cmplayer$ ./cmplayer-bin
./cmplayer-bin: error while loading shared libraries: libcmplayer_core.so.0: cannot open shared object file: No such file or directory
라고 메세지가 올라오는데 lib안에는 위 파일이있거든요
무엇이문제인가요?
add
- 댓글 남기기

















