Powered by Drupal, an open source content management system

เทคนิคการปรับแต่ง Qt4

การเปลี่ยน font ที่ใช้ใน Application

เมื่อทำการติดตั้ง Qt4 เป็นที่เรียบร้อยแล้ว โปรแกรมยอดฮิตที่เรามักจะรันคือ fluidlauncher

# ./fluidlauncher -qws

และคำถามที่มักจะตามมาคือ font เล็กจัง จะเปลี่ยน font ยังไง

Qt จะเก็บ font ไว้ภายใต้ directory /usr/local/Qt/lib/fonts ซึ่งจะมีดังนี้

DejaVuSans-Bold.ttf             fixed_70_50.qpf
DejaVuSans-BoldOblique.ttf      helvetica_100_50.qpf
DejaVuSans-Oblique.ttf          helvetica_100_50i.qpf
DejaVuSans.ttf                  helvetica_100_75.qpf
DejaVuSansMono-Bold.ttf         helvetica_100_75i.qpf
DejaVuSansMono-BoldOblique.ttf  helvetica_120_50.qpf
DejaVuSansMono-Oblique.ttf      helvetica_120_50i.qpf
DejaVuSansMono.ttf              helvetica_120_75.qpf
DejaVuSerif-Bold.ttf            helvetica_120_75i.qpf
DejaVuSerif-BoldOblique.ttf     helvetica_140_50.qpf
DejaVuSerif-Oblique.ttf         helvetica_140_50i.qpf
DejaVuSerif.ttf                 helvetica_140_75.qpf
README                          helvetica_140_75i.qpf
UTBI____.pfa                    helvetica_180_50.qpf
UTB_____.pfa                    helvetica_180_50i.qpf
UTI_____.pfa                    helvetica_180_75.qpf
UTRG____.pfa                    helvetica_180_75i.qpf
Vera.ttf                        helvetica_240_50.qpf
VeraBI.ttf                      helvetica_240_50i.qpf
VeraBd.ttf                      helvetica_240_75.qpf
VeraIt.ttf                      helvetica_240_75i.qpf
VeraMoBI.ttf                    helvetica_80_50.qpf
VeraMoBd.ttf                    helvetica_80_50i.qpf
VeraMoIt.ttf                    helvetica_80_75.qpf
VeraMono.ttf                    helvetica_80_75i.qpf
VeraSe.ttf                      japanese_230_50.qpf
VeraSeBd.ttf                    l047013t.pfa
c0419bt_.pfb                    l047016t.pfa
c0582bt_.pfb                    l047033t.pfa
c0583bt_.pfb                    l047036t.pfa
c0611bt_.pfb                    l048013t.pfa
c0632bt_.pfb                    l048016t.pfa
c0633bt_.pfb                    l048033t.pfa
c0648bt_.pfb                    l048036t.pfa
c0649bt_.pfb                    l049013t.pfa
cour.pfa                        l049016t.pfa
courb.pfa                       l049033t.pfa
courbi.pfa                      l049036t.pfa
couri.pfa                       micro_40_50.qpf
cursor.pfa                      unifont_160_50.qpf
fixed_120_50.qpf

ในการเปลี่ยน font ที่จะรัน เราสามารถใช้ option -fn ต่อท้ายคำสั่งเพื่อกำหนด font

จากตัวอย่างเราจะลองเปลี่ยน font เป็น unifont ดังนี้

# ./fluidlauncher -qws -fn unifont

จะสังเกตุเห็นว่า font ที่ใช้ใน Application จะเปลี่ยนไปตามที่เรากำหนด

แต่เมื่อลองเลือกรัน Application stylesheets จาก fluidlauncher จะเห็นว่า font ที่ใช้ใน stylesheet ยังเป็นตัวเล็กอยู่

สาเหตุที่เป็นเช่นนี้เนื่องจาก stylesheets จะเป็น application อีกตัวที่ถูกเรียกใช้จาก fluidlauncher โดยไม่ได้ผ่านข้อมูลเกี่ยวกับ font ไปให้

fluidlauncher จะใช้ไฟล์ที่อยู่ใน directory เดียวกันชื่อ config.xml เป็นตัวกำหนดรายละเอียดของชื่อโปรแกรมและพารามิเตอร์ที่จะรัน ดังนั้นหากเราต้องการเปลี่ยน font ก็ให้เปิดไฟล์ config.xml และเพิ่ม option -fn ดังนี้

<example filename="../embeddedsvgviewer/embeddedsvgviewer" name="SVG Viewer" image="screenshots/embeddedsvgviewer.png" args="../embeddedsvgviewer/shapes.svg" args="-fn unifont"/>

 

จะเห็นว่า application จะถูก launch ด้วย font ที่เรากำหนด

 

การหมุนจอภาพ

การหมุนจอภาพจำเป็นต้องใช้ driver ตัวนึงที่ชื่อว่า Transformed ซึ่งจะถูกสร้างขึ้นมาพร้อมกับระบบโดยเราต้องระบุ feature ดังนี้ -qt-gfx-transformed ในขั้นตอนการ configure (ดูใน การสร้าง Qt4.5.3 และ Qt4.6 สำหรับ mini2440 หัวข้อที่ 5)

การใช้งานสามารถระบุได้ทั้งจาก Environment Variables ดังนี้

# export QWS_DISPLAY=tansformed:rot90

หรือจะเป็น option ต่อท้าย application ก็ได้ดังนี้

# ./deform -qws -fn unifont -display "transformed:rot90"

หลังจากนั้นเมื่อรัน application จอภาพก็จะหมุนไป 90 องศาตามต้องการ

 

การทำ Remote Desktop ด้วย VNC

 VNC (Virtual Network Computing) เป็นเทคนิคในการแชร์จอภาพ คีย์บอร์ด และ เมาส์ ด้วยกันจากคอมพิวเตอร์ตัวหนึ่งไปยังอีกตัวหนึ่ง ทำให้คอมพิวเตอร์อีกตัวสามารถเห็นภาพของคอมพิวเตอร์อีกตัวหนึ่งและควบคุมได้ด้วย ข้อดีของ VNC คือเป็น Open Source และไม่ยึดติดกับ Operating System

เราจะมาลองดึงภาพจากจอ lcd ของ mini2440 มายังจอพีซี และควบคุมโปรแกรมที่วิ่งบน mini2440 ผ่านคีย์บอร์ดและเมาส์ของพีซีกันนะครับ

สิ่งที่ต้องมีคือ

  • ระบบ Qt ที่มี VNC Driver ซึ่งสามารถกำหนดได้ในขั้นตอน configure ด้วยการเพิ่ม option ดังนี้ -qt-gfx-vnc (ดูใน การสร้าง Qt4.5.3 และ Qt4.6 สำหรับ mini2440 หัวข้อที่ 5)
  • โปรแกรม vncviewer สำหรับวิ่งบนวินโดวส์ดาวโหลดได้จาก http://www.tightvnc.com/download/1.3.10/tightvnc-1.3.10_x86_viewer.zip การใช้โปรแกรม vncviewer ทำได้ง่ายดายเพียงแต่แตกไฟล์โดยไม่ต้องติดตั้ง เวลาจะรันก็เพียงแต่เปิดไฟล์ vncviewer.exe เท่านั้น

ขั้นตอนในการใช้งาน

1. ใช้คำสั่ง ifconfig ที่ mini2440 เพื่อตรวจสอบดูว่า ip address ของ mini2440 คืออะไร ในที่นี้กำหนดให้เป็น 192.168.1.101

2. VNC Driver ในมุมมองของ Qt แล้วคือจอตัวหนึ่งซึ่ง defualt จะกำหนดให้มีขนาด 640x480 พิกเซล เราสามารถที่จะทำการเปลี่ยนแปลงค่า default นี้ได้

3. ลองมารัน application textedit กันนะครับ

# cd /usr/local/Qt/demos/textedit
# ./textedit -qws -fn unifont -display "VNC:size=720x480:depth=32"
QVNCServer created on port 5900

เราเริ่มต้นด้วยการรัน textedit โดยกำหนดให้ใช้ font unifont และให้แสดงผลไปยัง vnc driver ที่กำหนดให้มีขนาด 720x480 จำนวนสีต่อพิกเซล 32

เราจะไม่เห็นอะไรปรากฏบนหน้าจอ lcd เพราะขณะนี้เอาพุทของโปรแกรมจะวิ่งไปหา vnc โปรดสังเกตุข้อความ QVNCServer created on port 5900 ซึ่งหมายความว่าขณะนี้ VNCServer ได้ทำการรันแล้วโดยใช้พอร์ทหมายเลข 5900 ซึ่งเป็นหมายเลขที่ vnc นิยมใช้

หมายเหตุ อย่าลืมเปิด firewall บน windows ให้อนุญาติใช้ port 5900 ด้วยนะครับ

4. เปิดโปรแกรม vncviewer.exe แล้วเรียกไปยัง ipaddress ของ mini2440 ดังนี้

หลังจากกดปุ่ม connect ก็จะเห็นโปรแกรม textedit ที่วิ่งบน mini2440 ปรากฏบน vncviewer

กดปุ่ม maximize มุมบนขวาของโปรแกรม textedit เพื่อให้โปรแกรมเต็มจอ vnc เราก็จะสามารถที่จะใช้ keyboard และ mouse เหมือนโปรแกรมปกติทั่วไป

 

ภาพตัวอย่างการวิ่ง fluidlauncher ด้วย default size (640x480)

# ./fluidlauncher -qws -fn unifont -display "VNC" 

 

ตัวอย่างการวิ่ง deform บน mini2440 และให้มาแสดงผลบน vnc ที่วิ่งบน PC จะเห็นว่าความเร็วพอใช้ได้ทีเดียว

 

# export QWS_SIZE=240x320
# cd /usr/local/Qt/demos/deform
# ./deform -qws -fn unifont -small-screen -display "vnc"

 

ท้ายที่สุดนี้ถ้าต้องการที่จะรันและให้แสดงผลบน lcd ของ mini2440 และ vnc บน PC ไปพร้อมๆกันสามารถทำได้โดย กำหนด display ให้เป็น vnc over framebuffer ดังนี้

# export QWS_SIZE=240x320
# cd /usr/local/Qt/demos/embedded/styledemo
# ./styledemo -qws -fn unifont -small-screen -display "vnc:linuxfb"

หวังว่าคงสนุกกับการใช้งาน Qt ในรูปแบบต่างๆนะครับ

อ้างอิง

The VNC Protocol

Qt for Embedded Linux Display Management

Qt for Embedded Linux Environment Variables

Running Qt for Embedded Linux Applications

Qt for Embedded Linux Fonts