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나 됩니다. 이 외에 필요없는 포트를 함께 삭제해서 사용하고 있습니다.
Wednesday, August 11, 2010
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 최초 실행 시 생성됨
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 최초 실행 시 생성됨
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?
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
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 프로그램을 띄우면 제대로 나왔습니다.
답변 부탁드립니다 (__)
타겟보드는 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 프로그램을 띄우면 제대로 나왔습니다.
답변 부탁드립니다 (__)
Sunday, August 8, 2010
Subscribe to:
Posts (Atom)