Search Results for '2008/08'

3 POSTS

  1. 2008/08/25 삽질
  2. 2008/08/25 Qt에 대하여 - 10. 실전! - 텍스트 에디터(1)
  3. 2008/08/16 CMPlayer 0.2.0을 릴리즈 (4)

삽질

2008/08/25 05:12
오랜만에 Qt에 대하여를 썼는데, 이전편을 참조할게 있어서 열어놨다가, 실수로 새로 쓴 글을 갱신한다는게 오래된 글(6번)을 갱신해버렸다-_-;
결국 고민 끝이 6번이후의 글을 전부 갱신해서 순서를 맞추는 삽질을 했다...
새벽에 뭐하는건지...
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/08/25 05:12 2008/08/25 05:12

Trackback URL : http://xylosper.net/trackback/122

Leave a comment
[로그인][오픈아이디란?]

원래 이번편은 폼디자인할때 자주쓰이는 위젯들에 대해서 설명할려고 했는데, 생각해보니 한둘도 아니고 자주쓰인다는 기준도 좀 모호하고, 그냥 함수설명하는 거라면 assistant찾아보면 다 나오는 것들이니, 별 영양가있는 내용이 나올것 같지않아서, 방향을 바꾸고, 이번편 부터는 직접 어플리케이션을 짜보도록 하겠습니다.

만들 어플리케이션은 텍스트 에디터입니다.
이미 assistant에서도 application이라는 이름의 예제로 텍스트 에디터를 제시할만큼, Qt로 어플리케이션을 만드는 방법을 설명하는데 있어서 그럴듯하면서도 이보다 간단한 예제는 드물듯 합니다.

텍스트 에디터라고 해도, 우리가 직접 인코딩 디코딩을 해주거나 할 필요는 없습니다.
Qt에는 QTextEdit라는, 텍스트 에디터로 바로 써도 손색없는 훌률한 위젯이 있습니다.
그러므로, 이 예제는 텍스트를 편집하는 방법 그 자체가 아니라, 어플리케이션이 일반적으로 지니고 있는 메뉴나 상태바, 툴바등을 어떻게 다룰지를 설명하는데 그 중점이 놓여질 것입니다.

또한, 일반적으로 문서를 다루는 어플리케이션에는 SDI와 MDI 두가지가 있다는 것 알고 계시죠?

모르는데?

간편을 위해서 일단 처음은 SDI로 시작하겠지만, 최종적으로는 MDI로 확장할 예정입니다.

1. QMainWindow
보통 어플리케이션을 만들때, 최상위 윈도우는 QMainWindow 클래스를 상속받아서 구현합니다.
QMainWindow 클래스에는, 일반적인 어플리케이션이 갖추고 있는 메뉴바, 툴바, 상태바들이 구현되어있고, 위젯들을 도킹시키기 위한 영역도 가지고 있기 때문에 매우 간단하게 어플리케이션을 만드는 것이 가능합니다.
QMainWindow를 상속받아서 MainWindow라는 클래스를 만들어 보겠습니다.

mainwindow.h

mainwindow.cpp

QMainWindow를 상속받아 MainWindow를 만들었습니다.
private 멤버로 Data *d를 선언하고 있는데, 이건 필자의 프로그래밍 스타일입니다.
이렇게 함으로써, 해더파일을 수정할 필요없이, 멤버들을 자유롭게 추가할수가 있기때문에, 이경우 처럼 해더파일의 의존성이 거의 0나 마찬가지인 클래스에서도 습관적으로 private영역에 데이터 전용 클래스를 선언하여 이용합니다. 이 데이터 클래스의 정의는 mainwindow.cpp에 있는데, 이로써 실제로 데이터 클래스의 구현을 숨기는 효과도 있습니다.
데이터 클래스에 지금은 아무것도 안들어있지만, 앞으로 추가할 멤버가 필요하면 여기에 추가해가게 될 것입니다.

이제 메인함수와 프로필파일을 만들어서 컴파일해보겠습니다.
main.cpp


texteditor.pro


처음으로 어플리케이션을 만들어 보는 것이므로 프로필 파일까지 처음부터 작성해보았습니다.
어플리케이션 이름은 texteditor로 하였습니다.
이상의 네 파일을 한 디렉토리안에 작성하고, 컴파일(qmake && make)해주면, 실행파일이 튀어나옵니다.
한번 실행해봅시다.
메인윈도우

썰렁하기 그지없는 모습

위 그림과 같이 아무것도 없는 창하나가 뜰 것입니다.
뭐야~ 메뉴바같은거 다 구현되있다며~ 라고 따지실 분이 계실지도 모르겠지만, '구현'되어있는 것과 객체를 만드는 것은 다릅니다.
OOP인 만큼, 메뉴바도 상태바도 다 객체이고, 이것들은 생성해주어야 합니다.
이것들을 생성하는 것은 곧 보게될 것입니다.

이제 하나씩 만들어 갑시다.
일단은 텍스트를 편집할 부분이 필요합니다.
처음에 말했듯이, QTextEdit라는 클래스를 이용합니다.
mainwindow.cpp

QTextEdit 클래스를 이용하기 위해 해더파일을 추가하고, 데이터 클래스에 QTextEdit *edit를 추가하였습니다.
생성자로 가보면 edit에 객체를 생성하여 할당하고 있습니다.
QTextEdit의 생성자로 this를 넘기는 것은 설명하지 않아도 될것이라고 믿습니다(왜인지 모르시는 분은 6편을 복습하시기 바랍니다).

그다음 줄을 보면 setCentralWidget(d->edit); 라는 함수를 호출하고 있습니다.

QMainWIndow는, 위젯을 몇개의 영역으로 나누고 있습니다.

사용자 삽입 이미지

QMainWindow의 영역(Qt assistant QMainWindow항목으로부터 인용)

위 그림과 같이, 제일 상단에 메뉴바를, 제일 하단에 상태바를, 그 안쪽으로 툴바 영역을, 또 그안쪽으로는 도킹 영역을, 그리고 가장 안쪽에 'Central Widget'을 위한 영역이 있습니다.

이 Central Widget이 바로 어플리케이션에서 주된 기능(이경우는 텍스트 편집)을 담당하는 위젯이 될 것입니다.

setCentralWidget함수는 이름 그대로 central widget을 지정하기 위한 함수입니다.
이제 central widget에는 QTextEdit의 인스턴스인 d->edit가 들어가있습니다.
수정된 파일을 다시 컴파일하고 실행해보면 다음과 같은 창이 뜹니다.
사용자 삽입 이미지
우리는 central widget이외에 아무것도 생성하지 않았기 때문에, d->edit외에 아무것도 안나옵니다.
이 창에서 이것저것 글씨를 적을수 있습니다. 그뿐만 아니라 복사하기와 붙여넣기도 가능하고, 편집한 내용을 되돌리거나 다시 실행하기(undo/redo)도 가능합니다.
이것들은 모두 이미 QTextEdit에서 구현되어있는 기능들입니다.
따라서 우리는 사실상 텍스트자체를 편집하기 위해서 딱히 해줘야할 것들은 없고, 어플리케이션을 구현하는 만드는 방법에 집중할 수 있을 것입니다.

내용이 길어지므로 이번편의 내용은 이쯤에서 마치겠습니다.
마지막으로 이번편에 이용한 예제 소스파일을 첨부합니다.
texteditor.tar.gz

예제코드

다음편에는 메뉴바작성을 해보겠습니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/08/25 05:09 2008/08/25 05:09

Trackback URL : http://xylosper.net/trackback/121

Leave a comment
[로그인][오픈아이디란?]

CMPlayer 0.2.0을 릴리즈

2008/08/16 02:26
CMPlayer 0.2.0을 공개합니다.
이번 버전에서 가장큰 변화는, 백엔드가 MPlayer에서 xine으로 변경된 것입니다.
기존에 이용하시던 분은, xine을 설치하셔야 0.2.0을 이용할 수 있습니다.

백엔드를 변경함으로써, 다음의 두가지가 가능해졌습니다.

1. DVD메뉴지원
DVD메뉴를 조작하는 것이 가능해졌습니다.
DVD 메뉴 스크린샷

메뉴 선택 화면

당연히 이 메뉴를 통해서 장면 탐색이나 자막 선택도 가능합니다.
DVD 장면 색인 스크린샷

장면 색인

0.1.3에서는 컨텍스트메뉴로 챕터별로 탐색하도록 만들었는데, 이 챕터별 탐색은 순서도 뒤죽박죽이고 어떤 내용이 들어있는지도 알수 없기 때문에, DVD메뉴지원을 추가하고 챕터 탐색을 삭제하였습니다.

2. 컬러 자막 지원
xine에서는 256색의 컬러 OSD를 그리는것이 가능합니다. 이것을 이용하여, 직접 자막파일을 파싱하여 뿌려주도록 하고, 색깔도 지정할 수 있습니다.
컬러 자막 스크린샷

컬러 자막

스샷은 굉장히 해상도가 높은 동영상 파일이기 때문에 자막이 굉장히 깨끗하게 나왔는데, 일반적인 동영상 해상도에서 자막의 품질 자체는 좀 떨어집니다. 컬러지원이 가능하다는데 의의를 두었습니다. 더불어 smi자막의 색깔지정 태그도 적용됩니다.
덤으로, san serif같은 fontconfig로 조합된 글꼴도 제대로 인식하기 때문에, 예를 들어 일본어 폰트와 한국어 폰트를 san serif에 매칭시켜놓고, 자막파일을 유니코드로 만들 경우, 동시에 일본어와 한글을 깨지지 않고 표시하는게 가능합니다.
위 스샷을 보면 会라는 會의 약자가 깨지지 않고 한글과 동시에 표시되는 것을 알수 있습니다.


xine으로 백엔드를 변경함으로 얻은 것도 있지만, 잃은 것도 있습니다.
1. 깔끔하지 못한 탐색
xine의 탐색 정책(seeking policy)때문에, 짧은 시간간격으로 앞으로 이동할경우, 반대로 뒤로가버리는 경우가 발생합니다.
이건 xine자체의 문제라 어떻게 할수가 없습니다. 대신에, 연속으로 탐색에 실패할경우 자동으로 탐색 시간을 늘려서 뛰어넘을수 있도록 만들었습니다.

2. 여백 표시에따른 제한
여백으로 화면을 확장하여, 전체화면일때 상하 검은 여백에 자막을 표시하는 기능은 유지할 수 있었습니다(위 스샷참고).
다만, xine의 경우 영상을 확장하면 임의로 화면비율을 조절하는게 불가능한 단점이 있어, 여백에 표시하기를 활성화시키면 화면비율 변경 및 잘라내기가 불가능해집니다.

마지막으로, 기본적으로 비활성화되어있습니다만, 자막 OSD 설정에 고품질 설정이란 것이 있습니다.
이부분을 활성화 시키면, 영상을 확대해도 자막이 늘어져서 품질이 떨어지는 현상은 없어지지만, 대신에 동영상을 제대로 보기가 힘들 정도로 버벅일수 있습니다.
최대한 속도를 올리고 올렸는데 이정도인지라, 일단 구현한게 아까워서 넣어두긴 했는데, 그다지 추천하진 않습니다.
한번 흥미있으신분은 적용해보세요.

그외의 바뀐점들은, 릴리즈노트 및 변동 사항을 참고해주세요.

릴리즈된 파일은 언제나처럼 CMPlayer 프로젝트 페이지에서 다운받을수 있습니다.

나름 혼자 써보면서 알아챈 부분은 다 고친다고 하긴 했지만, 혼자 테스트하는데에는 한계도 있고, 백엔드를 변경하면서 xine에 대한 이해부족으로 놓친 것들도 많을 듯합니다.
사용하시면서 문제점을 발견하신분은 여기나 CMPlayer 프로젝트 페이지에 알려주시기 바랍니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/08/16 02:26 2008/08/16 02:26

Trackback URL : http://xylosper.net/trackback/120

  1. # xa 2008/09/04 17:44 Delete Reply

    안녕하세요
    kldp에서 QFormLayout을 쓰지 않는 바이너리를 받아 사용하고 있는데 사용 중에 몇가지 문의드릴 게 있어 글을 남깁니다. 일단 저는 우분투 8.04를 사용하고, CMPlayer 런타임 정보에는 Qt 4.3.4., xine 1.1.11.1 라고 나옵니다.

    기본적으로 저는 탐색도구 아래에 있는 정보가 전혀 나오질 않네요. 재생시간이 나오는 그곳 말입니다. 그리고 CMPlayer를 따로 실행시키면 별 문제가 없는데 노틸러스에서 연결해서 사용하면 이런저런 문제가 발생하네요.

    그 중 몇가지를 꼽자면 일단 비디오 출력을 xv로 하면 노틸러스에서 바로 재생이 안됩니다. 화면은 까만 상태로 소리만 1초쯤 나오다 멈춰버립니다. 재생 버튼을 눌러주면 그제서야 재생이 되고요. auto로 하면 바로 재생이 됩니다. 하지만 이 경우에도 문제가 있는데 재생되는 화면 비율이 옆으로 늘어져 나옵니다. 참고로 제 모니터는 20.1인치 와이드(1680x1050)인데 totem에서는 문제가 없었고 mplayer에서는 마찬가지의 현상이 있었지만 config에 monitoraspect=1680/1050 라고 설정을 해주면 해결이 되었습니다.
    그리고 이렇게 화면이 늘어져나오는 것도 영상크기를 100%로 다시 조절해주면 원래대로 돌아오지만 재생하는 동영상 해상도가 크면 또 다른 문제가 생깁니다. 1280x720의 해상도를 가진 영상을 재생하면 창이 자동적으로 최대화가 되어버리네요. 그래서 100%를 해도 다시 돌아오지 않습니다. 일단 창의 최대화를 해제하고 나서야 원래의 크기로 되돌릴 수 있네요.

    마지막으로 노틸러스에서 연결하면 자막이 나오지 않습니다. 열기로 직접 열거나 드래그하면 제대로 나오고요.

    탐색이 원활하지 못한 것은 아쉽지만 자막 처리 부분에서는 만족스럽네요.

    p.s 비율이 늘어나는 화면은 http://fuwafuwa.tistory.com/22 쪽을 참고해주세요.

    1. Re: # xylosper 2008/09/04 19:09 Delete

      상세한 리포트 감사합니다.
      일단 재생시간 등이 표시되지 않는 문제는 알고는 있었는데 어떻게 고쳐야할지를 모르겠습니다-_-;
      테마가 클리어룩(그놈 테마)로 설정되면 흰색 글자로 지정한 스타일이 안먹히더라구요. 다음 릴리즈때엔 고치도록 해보겠습니다.
      해상도문제를 포함하여 그외의 문제들은 노틸러스에서 실행했을때만 발생하는 문제인가요..?
      특히 해상도 부분은, 저도 좀 테스트를 해보고 싶은데 와이드 모니터가 없어서 못하고 있습니다...하나 사고 싶은데...-_ㅜ
      xine은 라이브러리 형태라서 자유도가 높은 만큼 신경써야 할 부분도 많아서 이래저래 부족한점이 많은 듯합니다.
      특히 탐색이 거지같은것-_-;은 저도 큰 불만인데, xine자체의 문제라 어떻게 할수가 없네요.
      아무튼 말씀해주신 것들 확인해보고 가능하면 다음 릴리즈때 수정하도록하겠습니다. 감사합니다.

  2. # xa 2008/09/04 21:24 Delete Reply

    예, 재생정보 나오는 부분을 제외하면 모두 노틸러스에서 연결했을 때만 발생하는 문제입니다. 따로 실행시켜서 불러오면 아무런 문제가 없고요.

    다음 버젼 기다리고 있겠습니다. :)

    1. Re: # xylosper 2008/09/05 18:04 Delete

      일단 재생정보가 나오지 않는 부분을 수정하여 0.2.1을 릴리즈하였습니다. 한번 확인해보시기 바랍니다.
      노틸러스 관련 문제는, 제가 지금 노트북 들고 나와있는 상태라 테스트가 곤란합니다.
      이달 말쯤에 집으로 돌아가니, 그이후가 될듯합니다. 늦어져서 죄송하지만, 당분간은 별도로 실행해서 이용해주세요.

Leave a comment
[로그인][오픈아이디란?]


Recent Posts

  1. MBTI 유형테스트
  2. static 변수를 이용한 싱글톤 구현시...
  3. CMPlayer 0.2.1 공개
  4. Qt 팁 - 2. Qt로 만든 프로그램을 배...
  5. Qt 팁 - 1. Qt로 정적(static) 빌드하기

Recent Comments

  1. 부업 돈벌기 이 부업을 하시면 반드... 이성순 09:48
  2. 부업 돈벌기 이 부업을 하시면 반드... 이성순 09:48
  3. 부업 돈벌기 이 부업을 하시면 반드... 이성순 11/20
  4. 일부러 찾아오셔서 댓글까지 남겨주... xylosper 10/11
  5. 트랙백 보고 왔어요. ^^ 저도 트랙백... A2 10/11

Recent Trackbacks

  1. Fioricet online. Buy fioricet online that ships to... 12:45
  2. 위젯 개발의 화두 'width' 위젯박사 쏭군의 열정이야기 11/20
  3. Bestiality porn zoo sex private ph... Horse porn beast porn zoo. 11/15
  4. Ultram er tablets. Side effects of ultram. 11/14
  5. 재미로 해보는 MBTI 검사 A2공간 - 도움되는 글을 쓰자 10/11

Calendar

«   2008/08   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Bookmarks

  1. Project CMPlayer
  2. seevaa의 잡다구리한 이야기

Site Stats

TOTAL 100152 HIT
TODAY 142 HIT
YESTERDAY 231 HIT
Statistics Graph