Wednesday, August 11, 2010

폰트 작은거 나의 성공사례

./launcher -qws -display :LinuxFb:/dev/fb2:mmWidth106:mmHeight62:0 &

Qt : 타겟에서 실행시 이미지와 폰트가 작게 나올경우

[QT/Embedded] QT4.4.3 을 보드에 포팅하였는데 기본폰트 크기가 너무 작습니다

답변이 없어서 자답을 하게 되네요...
후에 이와 관련된 문제가 있을시에 도움을 주고자 자답을 합니다.

QT4로 오면서 QWS_DISPLAY를 자신의 하드웨어와 매칭시켜주어야 하는것 같더군요.

그래서 저는 embedded설정하는 곳에서
export QWS_DISPLAY="LinuxFb:mmWidth=400:mmHeight=240"
으로 설정하였습니다.

제 보드의 화면 크기는 800*480인데 이를 반으로 줄여주었습니다.

이렇게 하여 화면에 디스플레이하는것을 조정하였습니다.

다음분들도 이런방법으로 해결하시길 빕니다. 답변이 없어서 자답을 하게 되네요...
후에 이와 관련된 문제가 있을시에 도움을 주고자 자답을 합니다.

QT4로 오면서 QWS_DISPLAY를 자신의 하드웨어와 매칭시켜주어야 하는것 같더군요.

그래서 저는 embedded설정하는 곳에서
export QWS_DISPLAY="LinuxFb:mmWidth=400:mmHeight=240"
으로 설정하였습니다.

제 보드의 화면 크기는 800*480인데 이를 반으로 줄여주었습니다.

이렇게 하여 화면에 디스플레이하는것을 조정하였습니다.

다음분들도 이런방법으로 해결하시길 빕니다.

QT의 크기를 줄이자

QT의 크기를 줄이자장길석http://forum.falinux.com/zbxe/?document_srl=4519472008.06.05 10:15:49 (*.105.125.81) 5110이번 글은 강좌나 개발 팁이 아니라 다른 분의 도움을 구하기 위해 올리는 글입니다. 글의 주제는 QT 라이브러리의 크기입니다. 더욱이 저는 QT4를 사용하고 있어서 라이브러리 크기가 부담 스럽습니다.

]# du -h lib/
32K lib/pkgconfig
15M lib/fonts
31M lib/
]#QT lib 크기가 자그만치 31M입니다. 그나마 다행(?)인 점은 폰트만 15M를 차지한다는 점입니다. 그럼 라이브러리의 크기를 줄이려면 어떻게 할까요?

strip으로 파일 크기 줄이기

라이브러리 파일에는 컴파일 시에 링크를 위한 참조 정보인 심볼이 있습니다. 이 심볼은 실행할 때는 필요 없기 때문에 삭제하여 크기를 줄일 수 있습니다. 이렇게 압축이 아닌 필요없는 정보를 삭제하는 것이라 기대만큼 파일 크기가 줄어 들지는 않더군요.

gcc 로 컴파일하셨다면 strip로, arm-linux-gcc 로 컴파일하셨다면 arm-linux-strip를 이용하시면 됩니다. 물론 arm-mipsel-gcc라면 arm-mipsel-strip가 되겠지요. 그럼 파일별로 크기를 보겠습니다.

[root@jwLinux lib]# ls -al -h
++계 17M
drwxr-xr-x 4 root root 4.0K 5+?21 01:06 .
drwxrwxrwt 18 root root 4.0K 5+?25 21:08 ..
drwxr-xr-x 2 root root 4.0K 5+?21 01:06 fonts
-rw-r--r-- 1 root root 707 5+?21 01:06 libQtCore.la
-rw-r--r-- 1 root root 637 5+?21 01:06 libQtCore.prl
lrwxrwxrwx 1 root root 18 5+?25 11:13 libQtCore.so -> libQtCore.so.4.3.4
lrwxrwxrwx 1 root root 18 5+?25 11:13 libQtCore.so.4 -> libQtCore.so.4.3.4
lrwxrwxrwx 1 root root 18 5+?25 11:13 libQtCore.so.4.3 -> libQtCore.so.4.3.4
-rwxr-xr-x 1 root root 2.6M 5+?21 01:06 libQtCore.so.4.3.4
-rw-r--r-- 1 root root 755 5+?21 01:06 libQtGui.la
-rw-r--r-- 1 root root 692 5+?21 01:06 libQtGui.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtGui.so -> libQtGui.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtGui.so.4 -> libQtGui.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtGui.so.4.3 -> libQtGui.so.4.3.4
-rwxr-xr-x 1 root root 11M 5+?21 01:06 libQtGui.so.4.3.4
-rw-r--r-- 1 root root 778 5+?21 01:06 libQtNetwork.la
-rw-r--r-- 1 root root 690 5+?21 01:06 libQtNetwork.prl
lrwxrwxrwx 1 root root 21 5+?25 11:13 libQtNetwork.so -> libQtNetwork.so.4.3.4
lrwxrwxrwx 1 root root 21 5+?25 11:13 libQtNetwork.so.4 -> libQtNetwork.so.4.3.4
lrwxrwxrwx 1 root root 21 5+?25 11:13 libQtNetwork.so.4.3 -> libQtNetwork.so.4.3.4
-rwxr-xr-x 1 root root 589K 5+?21 01:06 libQtNetwork.so.4.3.4
-rw-r--r-- 1 root root 771 5+?21 01:06 libQtScript.la
-rw-r--r-- 1 root root 687 5+?21 01:06 libQtScript.prl
lrwxrwxrwx 1 root root 20 5+?25 11:13 libQtScript.so -> libQtScript.so.4.3.4
lrwxrwxrwx 1 root root 20 5+?25 11:13 libQtScript.so.4 -> libQtScript.so.4.3.4
lrwxrwxrwx 1 root root 20 5+?25 11:13 libQtScript.so.4.3 -> libQtScript.so.4.3.4
-rwxr-xr-x 1 root root 1.4M 5+?21 01:06 libQtScript.so.4.3.4
-rw-r--r-- 1 root root 750 5+?21 01:06 libQtSql.la
-rw-r--r-- 1 root root 678 5+?21 01:06 libQtSql.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSql.so -> libQtSql.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSql.so.4 -> libQtSql.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSql.so.4.3 -> libQtSql.so.4.3.4
-rwxr-xr-x 1 root root 297K 5+?21 01:06 libQtSql.so.4.3.4
-rw-r--r-- 1 root root 771 5+?21 01:06 libQtSvg.la
-rw-r--r-- 1 root root 699 5+?21 01:06 libQtSvg.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSvg.so -> libQtSvg.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSvg.so.4 -> libQtSvg.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSvg.so.4.3 -> libQtSvg.so.4.3.4
-rwxr-xr-x 1 root root 462K 5+?21 01:06 libQtSvg.so.4.3.4
-rw-r--r-- 1 root root 750 5+?21 01:06 libQtXml.la
-rw-r--r-- 1 root root 678 5+?21 01:06 libQtXml.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtXml.so -> libQtXml.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtXml.so.4 -> libQtXml.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtXml.so.4.3 -> libQtXml.so.4.3.4
-rwxr-xr-x 1 root root 563K 5+?21 01:06 libQtXml.so.4.3.4
drwxr-xr-x 2 root root 4.0K 5+?21 01:06 pkgconfig
[root@jwLinux lib]# 11Mbyte나 되는 libQtGui.so.4.3.4의 크기를 줄여 보겠습니다. strip를 사용하기 전에 파일 정보를 알아 보겠습니다.

]# file libQtGui.so.4.3.4
libQtGui.so.4.3.4: ELF 32-bit LSB shared object, MIPS, version 1 (SYSV), not stripped
]#mipsel-linux-strip으로 파일 크기를 줄이고 파일 정보를 확인해 보겠습니다.

]# mipsel-linux-strip libQtGui.so.4.3.4
]# file libQtGui.so.4.3.4
libQtGui.so.4.3.4: ELF 32-bit LSB shared object, MIPS, version 1 (SYSV), stripped
]# ls -al -h libQtGui.so.4.3.4
-rwxr-xr-x 1 root root 9.4M 5+?25 21:28 libQtGui.so.4.3.4
]# 파일 크기가 11M 에서 9.4M으로 줄기는 줄었습니다만 기대만큼은 아니죠. 압축이 아니라 파일 내용 중에 실행에 필요없는 정보를 삭제하는 것이라 많이 줄지는 않더군요. 나머지를 모두 줄여 보았습니다.

]# ls -al -h
++계 15M
-rwxr-xr-x 1 root root 2.4M 5+?25 21:31 libQtCore.so.4.3.4
-rwxr-xr-x 1 root root 9.4M 5+?25 21:31 libQtGui.so.4.3.4
-rwxr-xr-x 1 root root 506K 5+?25 21:31 libQtNetwork.so.4.3.4
-rwxr-xr-x 1 root root 1.3M 5+?25 21:31 libQtScript.so.4.3.4
-rwxr-xr-x 1 root root 250K 5+?25 21:31 libQtSql.so.4.3.4
-rwxr-xr-x 1 root root 389K 5+?25 21:31 libQtSvg.so.4.3.4
-rwxr-xr-x 1 root root 488K 5+?25 21:31 libQtXml.so.4.3.4
]# du -h
15M ./fonts
32K ./pkgconfig
30M .
]#
줄기는 줄었지만 역시 기대만큼은 아니죠. 그래도 1개의 바이트 공간도 아쉬운 임베디드 환경에서 큰 차이는 아니더라도 이용하는 것이 좋겠습니다.

사용하지 않는 폰트 삭제

그다음에 눈에 띄는 것이 역시 폰트입니다.

lib]# cd fonts/
fonts]# ls -al
++계 14728
drwxr-xr-x 2 root root 4096 5+?21 01:06 .
drwxr-xr-x 4 root root 4096 5+?25 21:31 ..
-rw-r--r-- 1 root root 466696 5+?21 01:06 DejaVuSans-Bold.ttf
-rw-r--r-- 1 root root 441736 5+?21 01:06 DejaVuSans-BoldOblique.ttf
-rw-r--r-- 1 root root 434576 5+?21 01:06 DejaVuSans-Oblique.ttf
-rw-r--r-- 1 root root 493564 5+?21 01:06 DejaVuSans.ttf

...중략...

-rw-r--r-- 1 root root 1602 5+?21 01:06 micro_40_50.qpf
-rw-r--r-- 1 root root 1215089 5+?21 01:06 unifont_160_50.qpf
-rw-r--r-- 1 root root 672139 5+?21 01:06 wenquanyi_120_50.qpf
-rw-r--r-- 1 root root 672139 5+?21 01:06 wenquanyi_120_75.qpf
-rw-r--r-- 1 root root 715342 5+?21 01:06 wenquanyi_130_50.qpf
-rw-r--r-- 1 root root 715342 5+?21 01:06 wenquanyi_130_75.qpf
-rw-r--r-- 1 root root 804903 5+?21 01:06 wenquanyi_150_50.qpf
-rw-r--r-- 1 root root 804903 5+?21 01:06 wenquanyi_150_75.qpf
-rw-r--r-- 1 root root 1276472 5+?21 01:06 wenquanyi_160_50.qpf
-rw-r--r-- 1 root root 1276236 5+?21 01:06 wenquanyi_160_75.qpf
fonts]# wenquanyi 폰트만 6.6M나 됩니다. 이 외에 필요없는 포트를 함께 삭제해서 사용하고 있습니다.

Qt/E에서 사용 가능한 폰트 변환

Qt/E에서 사용 가능한 폰트 변환 오픈소스 by 버들피리 2006/01/01 19:45 beodeulpiri.egloos.com/9799950 덧글수 : 0
Qt/E font

Qt/E에서 사용 가능한 폰트
■ TrueType (TTF)
■ Postscript Type1 (PFA/PFB)
■ Bitmap Distribution Format fonts (BDF)
1. 각 크기마다 각각의 폰트를 가짐
2. Embedded system의 특성상 너무 느린 폰트 로딩 속도와 많은 디스크 공간을 차지하여 잘 사용되지 않음
■ Qt Prerendered Font (QPF)
1. BDF font와 같이 크기를 조정할 수 없음
2. Qt에서 제공하는 font format
3. BDF font에 비해 매우 작은 크기로 로딩 속도와 디스크 공간을 절약할 수 있음
4. Qt가 BDF, TTF font를 load해서 rendering이라는 절차를 거치는 과정에서 만들어내는 font

폰트 변환
■ QPF font는 TTF, BDF 등으로부터 생성할 수 있음
1. Tools 이용
2. -savefonts option 이용
3. $QTDIR/lib/font/fontdir 수정 후 이용
■ Tool 이용
1. makeqpf ($QTDIR/tools/makeqpf directory)
2. ./makeqpf를 실행하여 list item을 클릭하면 font가 생성됨
■ 실행 시 option 이용
1. -savefonts
2. ./application –qws –savefonts
3. application에서 사용한 font가 application 최초 실행 시 생성됨

윈도우 타이틀바 제거하기

setWindowFlags(Qt::FramelessWindowHint);

Tuesday, August 10, 2010

How can I change Qt font directory?

# QFontDatabase: Cannot find for directory /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/fonts - is Qt installed correctly?

directory path of message above are my host's directory.
How can I set directory for embedded target?

Qt supported font types

embedded Qt 한글 출력 (qte 3.0.4버젼)

1. qt는 PFA/FPB BDF,TTF,qtf 폰트등을 지원합니다.

2. qpf 폰트는 qt가 이들 bdf, ttf 폰트를 로드해서 rendering 이라는 절차를 거치는 과정에서 qpf라는 폰트를 나름대로 만들어서 사용을 하는 폰트입니다. qt쪽에서 보다 더 빠르게 만들어 놓은 format입니다.

3. qpf font를 만들기 위해선 x86용 embedded qt가 있어야 합니다. X86용 일반 qt는 안됩니다.


4. 프로그램 실행 옵션 중에 -savefonts 가 있습니다. 이 옵션을 주게 되면 내부적으로 사용하는 qpf를 디스크에 save를 해줍니다.

4. fontdir 파일의 사용방법
우선 $QTDIR/src/kernel/qfontmanager_qws.cpp 파일을 보면 자세히 나와있습니다.
(version마다 이 부분의 순서와 옵션이 다르며, 저 파일이 아닌 다른파일내에 존재할수있습니다. 반드시 저 부분을 확인후에 fontdir 설정을 하시던가 아니면 qt내의 fontdir내의 다른 폰트 설정을 참고하셔야합니다)



name - 프로그램에서 사용하는 setFont() 함수의 첫번째 인자에 해당합니다.
file - file이름
renderer - BDF or TTF
italic - 이텔릭체를 표현하겠냐? y or n
weight - 글씨의 굵기
size - 글씨의 크기
flags - 3가지 값을 가질 수 있습니다.
s - smooth anti-alias를 지원하는 폰트에 해당
u - font 체계가 unicode형식을 지원할 때
a - ascii 코드


주의할 것은 flags 중 u, a 값은 -savefonts 를 할 때 중요한 영향을 끼칩니다. 즉 사용하는 폰트가 unicode 형식을 지원한다고 해도 fontdir 에 u flag 를 써주지 않으면 savefonts 할 때 기본적으로 ascii 영역의 코드 밖에 저장되지 않습니다.

반 s 옵션의 font는 4-8kbyte 정도이나 u나 au 옵션일 경우 1-2Mbyte정도 나옵니다. 파일 크기만 비교해봐도 Unicode font인지 아닌지 추측 할수있습니다.

5. ttf의 한글폰트를 qpf로 바꾸는 방법

5.1 사용자가 임의로 추가한 폰트가 userfont.ttf 라고 할 때, 이 파일을 $QTDIR/lib/fonts 디렉토리에 넣습니다. 이때 QT는 x86용 embedded QT입니다.
( version에 따라 $QTDIRlib/fonts가 없을경우 $QTDIR/etc/fonts 일수 있습니다.)

5.2 fontdir 파일을 수정합니다. 다음 줄을 추가합니다.
….
userfont userfont.ttf FT y 50(bold일경우 75) 0 u(또는 au)

5.3 $QTDIR/examples/hello 프로젝트에서 main.cpp를 내에서 setFont를 해주는 부분에서 userfont 를 사용할 수 있게 수정을 합니다. 필요한 fontsize 와 bold형태에 따라 모두 추가합니다. 몇 개라도 상관없습니다. 다넣어도 됩니다.

setFont("userfont",14,50)
QFont qf;
qf = QFont("userfont ",10,50);  
h.setFont(qf);
qf = QFont("userfont ",10,75);  
h.setFont(qf);
qf = QFont("userfont ",12,50);  
h.setFont(qf);
qf = QFont("userfont ",12,75);  
h.setFont(qf);
….


5.4 hello 프로젝트를 컴파일 합니다.
5.5 ./hello –qws –savefonts 라고 실행합니다. 이때 정상적을 폰트가 생성되면 창이 뜨는데 시간이 걸립니다. 만약 바로 실행되었을경우에는 font가 생성되지 않은겁니다.
( tip : fonts 내에 전에 만들어둔 qpf 파일이 있을경우 u, au 옵션을 바꾼다고 해서 새로 생성되지 않습니다. 반드시 새로 만들경우 기존의 폰트를 지우시기 바랍니다)

5.6 그럼 $QTDIR/lib/fonts 에 userfont_100_50.qpf 등이 폰트들이 생깁니다.

6. qtf 폰트를 사용하기

6.1 어떤 문서에는 fontdir내에 qpf 폰트를 등록하라고 되어있지만, qt3.x 부터는 qpf 폰트는 등록이 필요없이 자동으로 fonts를 검색하여 로드하게 됩니다.

6.2 qpf 폰트명이 qt 폰트 사용명이 됩니다.
userfont_100_50.qpf
QFont qf = QFont(“userfont”, 10, 50)

userfont_120_50.qpf
QFont qf = QFont(“userfont”, 12, 50)

userfont_100_75.qpf
QFont qf = QFont(“userfont”, 10, 75)

6.3 target에는 저 qpf 폰트들을 $QTDIR/lib/fonts내에 copy만 해주면 사용이 가능합니다.

7. TTF 폰트도 각 폰트 문자셋을 unicode base로 만들었는지 KSC5601 base로 만들었는지에 따라서 출력이 안될 수도 있습니다.

8. linux내에 등록되어 있는 batang.ttf gulim.ttf 는 unicode base로 만들어져 있습니다.
예를 들면, 한글 '가'는 unicode 일 경우 0xac00, KSC5601일 경우는 0xb0a1 입니다.

분명 응용프로그램을 작성할 때 vi를 이용했을 것입니다. 만약 이렇게 vi에서 한글은 KSC5601입니다. 따라서 이를 unicode 값으로 바꿔줘야 합니다. 이때 이용하는 것은 codec이 있습니다.

#include
QEucKrCodec* codec = new QEucKrCodec();
char* string="한글입니다";
QString hangul = codec->toUnicode(string, strlen(string));

이렇게 유니코드로 바꿔줍니다. hangul을 리스트 박스에 넣어보면 한글이 보일 것입니다

폰트에 관해 보다 자세한 사항은 아래 사이트를 참조하십시요
http://doc.trolltech.com/3.0/fonts-qws.html 사실 저도 아직 큐티에서 폰트를 만들어 보지를 않아서 딱히뭐라
말씀드리기 힘들어서 여기 저기 알아보니 아래와 같은 글들을 찾았습니다. 도움이 되시길 바라며, 저도 한번 해보도록 하겠습니다.^^;

http://www.korone.net/bbs/board.php?bo_table=qt_lecture&wr_id=89&page=7

http://achiven.tistory.com/1175582971
======================================================
embedded Qt 한글 출력 (qte 3.0.4버젼)

1. qt는 PFA/FPB BDF,TTF,qtf 폰트등을 지원합니다.

2. qpf 폰트는 qt가 이들 bdf, ttf 폰트를 로드해서 rendering 이라는 절차를 거치는 과정에서 qpf라는 폰트를 나름대로 만들어서 사용을 하는 폰트입니다. qt쪽에서 보다 더 빠르게 만들어 놓은 format입니다.

3. qpf font를 만들기 위해선 x86용 embedded qt가 있어야 합니다. X86용 일반 qt는 안됩니다.


4. 프로그램 실행 옵션 중에 -savefonts 가 있습니다. 이 옵션을 주게 되면 내부적으로 사용하는 qpf를 디스크에 save를 해줍니다.

4. fontdir 파일의 사용방법
우선 $QTDIR/src/kernel/qfontmanager_qws.cpp 파일을 보면 자세히 나와있습니다.
(version마다 이 부분의 순서와 옵션이 다르며, 저 파일이 아닌 다른파일내에 존재할수있습니다. 반드시 저 부분을 확인후에 fontdir 설정을 하시던가 아니면 qt내의 fontdir내의 다른 폰트 설정을 참고하셔야합니다)



name - 프로그램에서 사용하는 setFont() 함수의 첫번째 인자에 해당합니다.
file - file이름
renderer - BDF or TTF
italic - 이텔릭체를 표현하겠냐? y or n
weight - 글씨의 굵기
size - 글씨의 크기
flags - 3가지 값을 가질 수 있습니다.
s - smooth anti-alias를 지원하는 폰트에 해당
u - font 체계가 unicode형식을 지원할 때
a - ascii 코드


주의할 것은 flags 중 u, a 값은 -savefonts 를 할 때 중요한 영향을 끼칩니다. 즉 사용하는 폰트가 unicode 형식을 지원한다고 해도 fontdir 에 u flag 를 써주지 않으면 savefonts 할 때 기본적으로 ascii 영역의 코드 밖에 저장되지 않습니다.

반 s 옵션의 font는 4-8kbyte 정도이나 u나 au 옵션일 경우 1-2Mbyte정도 나옵니다. 파일 크기만 비교해봐도 Unicode font인지 아닌지 추측 할수있습니다.

5. ttf의 한글폰트를 qpf로 바꾸는 방법

5.1 사용자가 임의로 추가한 폰트가 userfont.ttf 라고 할 때, 이 파일을 $QTDIR/lib/fonts 디렉토리에 넣습니다. 이때 QT는 x86용 embedded QT입니다.
( version에 따라 $QTDIRlib/fonts가 없을경우 $QTDIR/etc/fonts 일수 있습니다.)

5.2 fontdir 파일을 수정합니다. 다음 줄을 추가합니다.
….
userfont userfont.ttf FT y 50(bold일경우 75) 0 u(또는 au)

5.3 $QTDIR/examples/hello 프로젝트에서 main.cpp를 내에서 setFont를 해주는 부분에서 userfont 를 사용할 수 있게 수정을 합니다. 필요한 fontsize 와 bold형태에 따라 모두 추가합니다. 몇 개라도 상관없습니다. 다넣어도 됩니다.

setFont("userfont",14,50)
QFont qf;
qf = QFont("userfont ",10,50);  
h.setFont(qf);
qf = QFont("userfont ",10,75);  
h.setFont(qf);
qf = QFont("userfont ",12,50);  
h.setFont(qf);
qf = QFont("userfont ",12,75);  
h.setFont(qf);
….


5.4 hello 프로젝트를 컴파일 합니다.
5.5 ./hello –qws –savefonts 라고 실행합니다. 이때 정상적을 폰트가 생성되면 창이 뜨는데 시간이 걸립니다. 만약 바로 실행되었을경우에는 font가 생성되지 않은겁니다.
( tip : fonts 내에 전에 만들어둔 qpf 파일이 있을경우 u, au 옵션을 바꾼다고 해서 새로 생성되지 않습니다. 반드시 새로 만들경우 기존의 폰트를 지우시기 바랍니다)

5.6 그럼 $QTDIR/lib/fonts 에 userfont_100_50.qpf 등이 폰트들이 생깁니다.

6. qtf 폰트를 사용하기

6.1 어떤 문서에는 fontdir내에 qpf 폰트를 등록하라고 되어있지만, qt3.x 부터는 qpf 폰트는 등록이 필요없이 자동으로 fonts를 검색하여 로드하게 됩니다.

6.2 qpf 폰트명이 qt 폰트 사용명이 됩니다.
userfont_100_50.qpf
QFont qf = QFont(“userfont”, 10, 50)

userfont_120_50.qpf
QFont qf = QFont(“userfont”, 12, 50)

userfont_100_75.qpf
QFont qf = QFont(“userfont”, 10, 75)

6.3 target에는 저 qpf 폰트들을 $QTDIR/lib/fonts내에 copy만 해주면 사용이 가능합니다.

7. TTF 폰트도 각 폰트 문자셋을 unicode base로 만들었는지 KSC5601 base로 만들었는지에 따라서 출력이 안될 수도 있습니다.

8. linux내에 등록되어 있는 batang.ttf gulim.ttf 는 unicode base로 만들어져 있습니다.
예를 들면, 한글 '가'는 unicode 일 경우 0xac00, KSC5601일 경우는 0xb0a1 입니다.

분명 응용프로그램을 작성할 때 vi를 이용했을 것입니다. 만약 이렇게 vi에서 한글은 KSC5601입니다. 따라서 이를 unicode 값으로 바꿔줘야 합니다. 이때 이용하는 것은 codec이 있습니다.

#include
QEucKrCodec* codec = new QEucKrCodec();
char* string="한글입니다";
QString hangul = codec->toUnicode(string, strlen(string));

이렇게 유니코드로 바꿔줍니다. hangul을 리스트 박스에 넣어보면 한글이 보일 것입니다

폰트에 관해 보다 자세한 사항은 아래 사이트를 참조하십시요
http://doc.trolltech.com/3.0/fonts-qws.html

Monday, August 9, 2010

QT/Embedded] 실행시 에러는 없는데 화면에 아무것도 안 뜹니다

내가 겪은 똑같은 상황을 질문한 내용 ----


타겟보드는 ARM 계열 CPU를 사용합니다.
qt-everywhere-opensource-src-4.6.1 를 다운받아서
크로스 컴파일은 성공적으로 했습니다.
컴파일 된 데모중 간단한것(examples/dialogs/findfiles)을 타겟보드에 올려서 실행하니
무슨 라이브러리들이 없다고 하길래 일일이 실행시켜보면서 필요한 라이브러리들을
다 복사했습니다.
그런 다음 또 실행하니 폰트 디렉토리가 설정이 안 되어 있다고 해서
폰트파일 다 다운로드 한 다음 심볼릭 링크로 경로 설정해두었습니다.
그런 다음 실행하니

QWSSocket::connectToLocalFile could not connect:: Connection refused
QWSSocket::connectToLocalFile could not connect:: Connection refused
QWSSocket::connectToLocalFile could not connect:: Connection refused
QWSSocket::connectToLocalFile could not connect:: Connection refused
QWSSocket::connectToLocalFile could not connect:: Connection refused
QWSSocket::connectToLocalFile could not connect:: Connection refused
No Qt for Embedded Linux server appears to be running.
If you want to run this program as a server,
add the "-qws" command-line option.

라느 메시지가 떠서 "-qws"옵션을 주고 실행했더니 에러는 안 나는데 화면에 아무것도 안 뜨더군요.
그래서 다른 이유 때문일거라고 추측하고 정말로 간단한 예제인
아래의 "hello"예제를 컴파일해서 타겟보드에 올린다음 실행했습니다.

#include
#include

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();

return app.exec();
}

그런데도 실행시 에러는 없지만 화면에 아무것도 안 뜹니다.
(더 정확히 상황을 묘사하자면 부팅 로고 이미지가 계속 떠있습니다.)
혹시 프레임버퍼 관련해서 뭔가 해줘야 하는 것이 있는지요.

참고로 Microwindow는 그냥 컴파일해서 실행시키면 제대로 나왔습니다.
nano-X를 실행시키면 부팅로고 이미지가 사라지면서 검은 배경색으로 채워졌고
이 상태에서 Microwindow 프로그램을 띄우면 제대로 나왔습니다.

답변 부탁드립니다 (__)

Friday, August 6, 2010

How to use directfb plug in Qt 4.6Suppose your application name is qt-apps.How you are running it? ./qt-apps -qws is nt it? Just like it you can run i

Suppose your application name is qt-apps.How you
are running it? ./qt-apps -qws is nt it? Just like it you can run it for
directfb as ./qt-apps -qws -display directfb . If it says that no directfb
plugins ...check your installation path of plugins .if libdirectfbscreen.so
present ther in your install directory in
plugins/gfxdriver/libdirectfbscreen.so ,It will invoke directfb .If it is
not there You should compile it in src/plugins/gfxdriver/directfb and
compile it and make install.
You can export it in your shell enviroment also.
Just go through this link
http://doc.trolltech.com/4.6/qt-embedded-running.html

just use -display directfb in command line to invoke directfb plugin driver
> and source code for this is
> qt-everywhere-opensource-src-4.6.0/src/plugins/gfxdrivers/directfb
>
> On Tue, May 4, 2010 at 1:04 AM, Krishnaveni Sistu (c)
> wrote:
>
> I have tried the following configuration option to build Qt4.6
>
> ../qt-$Qt_Ver/qt/configure -verbose -xplatform qws/linux-armv6wrs-g++
> -plugin-gfx-directfb
>
> -qt-kbd-brcm1107 -embedded arm -little-endian -no-largefile -no-phonon
> -no-phonon-backend
>
> -no-cups -no-mitshm -no-fontconfig -no-qvfb
>
>
>
> I have compiled moveblocks.c from the examples folder. When I executed it
> seems to be loading libqdirectfbscreen.so but not really using it. I have
> print statements in DirectFBScreenDriverPlugin. The prints from the
> constructor and the keys routine are getting printed but the print
> statements in create function are never getting printed. Looks like the
> create is not getting called at all.


This e-mail and any files transmitted with it are ShoreTel property, are
> confidential, and are intended solely for the use of the individual or
> entity to whom this e-mail is addressed. If you are not one of the named
> recipient(s) or otherwise have reason to believe that you have received this
> message in error, please notify the sender and delete this message
> immediately from your computer. Any other use, retention, dissemination,
> forwarding, printing, or copying of this e-mail is strictly prohibited
>

How to use ram disk?

Thursday, August 5, 2010

How to build BSP for TCC8900?

Linux Kernel Build
# patch -p0 < patch_linux_2.6.28-xxxxxx-Rxxxxxx
# cd linux-2.6.28-tcc
# make tcc89000_defconfig
# make menuconfig (set settings and save and quit)
# make; chmod +x tcc_mkrd.sh; ./tcc_mkrd.sh


Bootloader Build
# make distclean
# make
- some information displayed
# make 'information displayed above'

Ramdisk Build
# tcc_mk_rootfs.sh

How to increase ramdisk on TCC8900

change value of RAMDISK in tcc-mkrd.sh which is in bsp kernel source folder

How can I get ramdisk size?

# dmesg | grep RAMDISK

Sunday, August 1, 2010

우분투에 10.04 LTS에 QT4.6.2 phonon 포함 설치

사용자 계정 로그아웃 후 root로 로그인

8. [시스템] - [관리] - [시냅틱 패키지 관리자]에서
gst dev,
dbus dev,
get base,
gst base,
openssl dev,
sqlite dev,
alsa dev,
libqt4,
qt4,
phonon,
codec
로 검색하여 속한 모든 프로그램 및 패키지를 설치

9. QT 실행

.................

우분투에 10.04 LTS 에서 gstreamer 에 관한 개발을 할 때 필요한 패키지를 설치하는 명령어는 다음과 같습니다.

sudo apt-get -y install gstreamer-tools gstreamer0.10-alsa gstreamer0.10-doc gstreamer0.10-esd gstreamer0.10-ffmpeg gstreamer0.10-gnonlin gstreamer0.10-nice gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-tools gstreamer0.10-x libgnome-media0 libgstreamer-plugins-base0.10-0 libgstreamer-plugins-base0.10-dev libgstreamer0.10-0 libgstreamer0.10-dev

우분투에 10.04 LTS 에서 qt4의 개발환경을 설치하는 명령은 다음과 같습니다.

sudo apt-get -y install libqt4-assistant libqt4-dbg libqt4-dbus libqt4-designer libqt4-dev libqt4-gui libqt4-help libqt4-multimedia libqt4-network libqt4-opengl libqt4-opengl-dev libqt4-phonon-dev libqt4-qt3support libqt4-script libqt4-scripttools libqt4-sql libqt4-sql-mysql libqt4-sql-odbc libqt4-sql-psql libqt4-sql-sqlite libqt4-sql-sqlite2 libqt4-svg libqt4-test libqt4-webkit libqt4-webkit-dbg libqt4-xml libqt4-xmlpatterns libqt4-xmlpatterns-dbg libqwt5-doc libqwt5-qt4 libqwt5-qt4-dev qt4-demos qt4-designer qt4-dev-tools qt4-doc qt4-qmake qtcreator qtcreator-doc

sudo apt-get install build-essential bin86 kernel-package libstdc++6 g++ gcc libc6-dev gcc-3.4 libncurses5-dev python-dev python patch m4 make ccache perl diffstat bitbake wget curl ftp cvs git subversion git tar bzip2 gzip unzip jade docbook docbook-utils texinfo texi2html sec bison bc libsdl1.2-dev mktemp help2man gawk qemu nfs-kernel-server tftpd tftp xinetd ssh vim libx11-dev

우분투의 경우 기본적으로 개발패키지가 빠져있습니다. 기본적인 개발환경을 설치해주는 명령을 올립니다. 해당 명령은 우분투 9.04에서 확인 하였습니다.

sudo apt-get install build-essential 하면 왠만한거 다 설치됩니다.
물론 svn, git이런거는 그때그때 설치해 주셔야 하긴 하지만요.