Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Text Layout with Qt
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Jiang Jiang
December 12, 2011
Technology
180
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Text Layout with Qt
A talk presented in Chinese about the text layout support in Qt framework.
Jiang Jiang
December 12, 2011
More Decks by Jiang Jiang
See All by Jiang Jiang
Vertical Text Layout For Qt
jjgod
1
1.1k
Other Decks in Technology
See All in Technology
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
430
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
400
AWSDirectConnectの構築の進め方を整理してみた
masa_my
1
170
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
670
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
210
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
2
320
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
130
撮るだけでは終わらない。ソニーが挑むB2Bカメラソリューション開発
sony
0
100
dbt Semantic Layerで進めるenechainのデータ民主化
akizhou
1
250
How to Design Configuration for Rails Applications
willnet
2
1.2k
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
920
シンプルな設定ファイルで実現する AWS IAM Identity Center の ユーザー管理Terraformフレームワークを公開しました / Simplifying AWS IAM Identity Center User Management: An Open-Source Terraform Framework
yamaguchitk333
0
260
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
440
A Soul's Torment
seathinner
8
3.8k
Building Adaptive Systems
keathley
44
3.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
30 Presentation Tips
portentint
PRO
1
440
RailsConf 2023
tenderlove
30
1.6k
Discover your Explorer Soul
emna__ayadi
2
1.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Transcript
5FYU3FOEFSJOHXJUI2U 2U֥໓Чᛴಙඌ ࡾࡿ KJBOHKJBOH!OPLJBDPN
ܱႿ Ֆᇏ॓ჽ࠹ෘ෮иြၛުđᄝ/PLJB ύථ֥2Uྙቆ۽ቔਔ၂୍϶Ġ ༟ߋ࣮۲ᇕ໓Чᛴಙඌđູ2U षؿؓႋۿିĠ ಣιႪ֥ሳุބஆϱĠι॓ߘཬ ඪaҕაषჷཛଢb • •
•
ݺ2U
ᄸહႨ2UϜᛴಙ֞ଞഈĤ
QLabel QLabel
QTextEdit/QLineEdit QTextEdit/QLineEdit
2.-5FYU&MFNFOU
TextEdit/TextInput
)5.-JO28FC7JFX
QPainter::drawText QPainter::drawText
ߎႵ۷ਲࠃི֥ۚٚمગĤ
߶ਔࢳ֞હĤ Ֆ໓Чࢳ༅֞ཁൕཞ֥ಆݖӱ 2U૫෮Ⴕཁൕ໓Ч֥ٚمđૌ֥Ⴊׄ ಌׄđൡႨٓຶ 2Uᄝ۲۱༯൞ᄸဢൌགྷؓႋۿି֥ • • •
E4BDA0E5A5BD5174 E4BDA0E5A5BD5174
E4BDA0 E5A5BD 51 74 E4BDA0 E5A5BD 51 74
65' U+4F60 U+597D U+0051 U+0074 U+4F60 U+597D U+0051 U+0074
ݺ2U 6 ' 6 % 6 6
QString::fromUtf8(" QString::fromUtf8("Qt") Qt")
ఃщĤ QTextCodec *codec = QTextCodec::codecForName("GB18030-0"); QString str = codec->toUnicode("...");
ଽ҆ൌགྷཬᆩ് 24USJOHଽ҆Ⴈ65'-&Ќթሳژ Աđؓႋ2$IBS֥ਙđૄ۱2$IBS൞ ၂۱65'-&սׄ ᄝ6OJDPEF#.1ၛຓ֥ նਈܞࠡᇏ֥ ݱሳ Ⴈਆ۱৵࿃֥2$IBSіൕ ބ8JOEPXT.BD049֩ӈ༢֥ჰ
ള"1*၂ᇁđॖၛᆰࢤሇߐ • • •
໓Чᛴಙ֥ݖӱ ሳژіղ ሳุྐ༏ ሳุ ሳྙა໊ ᇂྐ༏ ஆϱႄౣ ሳุࢳ༅ ሳุ९
ܻᅅ߄
ሳุ
Arial Times Verdana Nokia Pure Text
Nokia Sans
ሳุ९
ሳุ९֥թԥ໊ᇂ 4ZTUFN-JCSBSZ'POUT -JCSBSZ'POUT _-JCSBSZ'POUT $=8JOEPXT='POUT VTSTIBSFGPOUT _GPOUT
ೂޅ๙ݖӱ٠໙ሳุ९Ĥ
ჰള֥ሳุܵ &OVN'POU'BNJMJFT %8SJUF'POU$PMMFDUJPO "QQMF5ZQF4FSWJDFT $5'POU$PMMFDUJPO.BOBHFS GPOUDPOGJH
ॴሳุܵ 2'POU 2'POU%BUBCBTF
࿊ᄴ၂۱ሳุ QFont f("Helvetica"); f.setWeight(QFont::Bold); f.setStyle(QFont::StyleOblique); Helvetica Bold Oblique
ਙԛॖ࿊ሳุ QFontDatabase db; QStringList families = db.families(); for (int
i; i < families.size(); i++) qDebug() << families[i] << db.styles(families[i]); Arial (Bold, Regular, Oblique, Bold Oblique) Heiti SC (Light, Medium) ...
໓Чᛴಙ֥ݖӱ ሳژіղ ሳุྐ༏ ሳุ ሳྙა໊ ᇂྐ༏ ஆϱႄౣ ሳุࢳ༅ ሳุ९
ܻᅅ߄
ሳุ֥ࢳ༅
$."1
$."1 ሳژ DIBSBDUFS ሳྙ෬ႄ HMZQI 6 ' 6
% 6 6
ሳྙক
ଽ҆ൌགྷཬᆩ് .BD 9 8JOEPXT ሳุ९ "54 $PSF5FYU GPOUDPOGJH
(%* %JSFDU8SJUF ሳุᄛೆ $PSF5FYU 'SFF5ZQF
໊ᇂ࠹ෘ
ሳए GPOUNFUSJDT
HMZQINFUSJDT QFontMetrics:: boundingRect(ch)
2'POU.FUSJDT QFont f("STHeiti"); QFontMetrics m(f); QString str = QString::fromUtf8("Qt");
m.boundingRect(str); m.height(); m.ascent(); m.descent(); ... ၂ࠆ౼ ሳएྐ༏ ֥ٚൔ
ݺ2U֥एྐ༏ ሳژ ሳྙ෬ႄ BEWBODF QY ჰ໊ׄᇂ ࡌഡ ູఏׄ
ݺ 2 U
໓Чᛴಙ֥ݖӱ ሳژіղ ሳุྐ༏ ሳุ ሳྙა໊ ᇂྐ༏ ஆϱႄౣ ሳุࢳ༅ ሳุ९
ܻᅅ߄
҃अ࠹ෘߎླေॉ੮
ࡗएטᆜ LFSOJOH ৵ሳ MJHBUVSF ูߐሳྙ
ൗࢸ۲ֹ֥ཿ༢
2UႨ֥ॴஆϱႄౣ )BSG#V[[ ऎุൌགྷ༥ࢫ൞ؓ2Uӱჴૼ֥
ࡼሳྙকሇߐູཞ SBTUFSJ[BUJPO ܻᅅ߄
ᛴಙิൕ IJOUJOH ҂Ⴈ WFSUJDBM IJOUJOH
QFont::setHintingPreference PreferDefaultHinting PreferNoHinting PreferVerticalHinting PreferFullHinting
ᄝၛ༯ݖӱᇏປӮ QPainter::drawText {QLabel/QTextEdit/QLineEdit}::paint QPainter::drawStaticText QTextLayout::draw QPainter::drawGlyphRun • • •
• •
ଽ҆ൌགྷཬᆩ് 2Uᄝ҂༯ิ܂ჰള֥ሳุᛴಙğ 8JOEPXT༯Ⴈ(%*%JSFDU8SJUF .BD049༯Ⴈ$PSF(SBQIJDT 9༯Ⴈ'SFF5ZQF ؓႿնႿQY֥ሳุđႨ21BJOUFSᆰ ࢤᛴಙ൏ਈক 2U༯ᆦӻEJTUBODFGJFMEᛴಙ •
– – – • •
໓Чᛴಙ֥ݖӱཬࢲ ሳژіղ ሳุྐ༏ ሳุ ሳྙა໊ ᇂྐ༏ ஆϱႄౣ ሳุࢳ༅ ሳุ९
ܻᅅ߄
2Uሳุ༢ࡏܒ 'POU3FOEFSFS %JTUBODF'JFME /BUJWF '5 $( (%* %8 -BZPVU&OHJOF)BSG#V[[
1MBUGPSN'POU%BUBCBTF CBTJD GPOUDPOGJH DPSFUFYU XJOEPXT
۲༯֥2Uൌགྷཬࢲ .BD 9 8JOEPXT 21" ሳุ९ "54 $PSF5FYU GPOUDPOGJH
(%* %JSFDU8SJUF CBTJD GPOUDPOGJH DPSFUFYU ሳุᄛೆ $PSF5FYU 'SFF5ZQF 'SFF5ZQF $PSF5FYU ஆϱ $PSF5FYU )BSG#V[[ )BSG#V[[ ᛴಙ $PSF5FYU 'SFF5ZQF (%* %JSFDU8SJUF %JTUBODF 'JFME /BUJWF
Ⴈ2Uᇅ໓Ч֥۲ᇕٚൔ
2.-5FYUჭ Text { text: "Qt" font.family: "STHeiti" font.pointSize: 24
color: "red" }
໓Ч॥ࡱ 2-BCFM 2-JOF&EJU 25FYU&EJU
QTextEdit textEdit(str); textEdit.document()->setDefaultFont(f); textEdit.show(); QLineEdit lineEdit(str); lineEdit.setFont(f); lineEdit.show(); QString
str = QString::fromUtf8("Qt"); QFont f("STHeiti"); QLabel label(str); label.setFont(f); label.show();
21BJOUFSESBX5FYU
ESBX5FYU֥ҕඔ ݺ2U ໓Чჰׄ ຓॿ ؓఊ
ૄՑေᇗྍ҃अđིੱ҂ۚ
class MyWidget: public QWidget { public: MyWidget(QWidget *parent =
0) : QWidget(parent) protected: void paintEvent(QPaintEvent *) { QPainter painter(this); painter.setFont(QFont("STHeiti")); painter.drawText(50, 50, QString::fromUtf8("Qt")); } };
24UBUJD5FYU 2U
ߏթ҃अྐ༏ၛิۚᇗ؇
҂ߏթᛴಙުཞၛࢫസଽթ
ྟିбࢠ _ _ _
24UBUJD5FYUൡކᄝଽթႵཋ֥ ഡСഈླေّگᇗ֥ࢸ૫ჭ
class MyWidget: public QWidget { public: MyWidget(QWidget *parent =
0) : QWidget(parent), m_staticText(QString::fromUtf8("Qt")) protected: void paintEvent(QPaintEvent *) { QPainter painter(this); painter.setFont(QFont("STHeiti")); painter.drawStaticText(50, 50, m_staticText); } private: QStaticText m_staticText; };
25FYU-BZPVU
ӈ֥໓Чஆϱଆൔ
ֆণ
؟ণ
໓Чߌಡ
҂ܿᄵྙሑ
25FYU-BZPVUᄍྸ॥ᇅૄྛ ໓Ч໊֥ᇂaэߐ࢘؇აྙሑ
QFont f("STHeiti"); QFontMetrics fontMetrics(f); QTextLayout textLayout(QString::fromUtf8("Qt"), f); int leading
= fontMetrics.leading(); qreal height = 0; textLayout.beginLayout(); while (1) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(lineWidth); height += leading; line.setPosition(QPointF(0, height)); height += line.height(); } textLayout.endLayout(); QPainter p(this); textLayout.draw(&p, QPointF(50, 50));
ቋָҪğ23BX'POU 2(MZQI3VO
2'POUWT23BX'POU
2'POUሳุ࿊ᄴ౨֥ࠢކ
2'POU Ⴈğ ေ7FSEBOBሳุቂ ေุོ ေՙุ ༢ğ ቋᆃ۱౨֥ሳุ൞ "/Library/Fonts/Verdana Bold
Italic.ttf" • – – – • –
23BX'POU࿊ק֥ൌ࠽ሳุ
2(MZQI3VO ၂۱23BX'POU ؟ؓ ሳྙ෬ႄ ໊ᇂ
ႨႿླေᆰࢤߏթᇅሳྙൈğ 2U8FC,JUބ2.-4DFOF(SBQI
QFont f("Nokia Pure Text"); QFontMetrics fontMetrics(f); QTextLayout textLayout(QString::fromUtf8("Qt"), f);
... textLayout.endLayout(); // QGlyphRun QList<QGlyphRun> glyphRuns = textLayout.glyphRuns(); QPainter p(this); // STHeiti "" p.drawGlyphRun(QPointF(50, 50), glyphRuns[0]); // Nokia Pure Text "Qt" p.drawGlyphRun(QPointF(50, 50), glyphRuns[1]);
ીႵ௴ൡ֥໓ЧᛴಙٚمĆ
۴ऌႋႨླ࿊ᄴކൡ֥ٚم ߋ႒࿃ิ໙
ҕॉ໓֖ 4UBUFPG5FYU3FOEFSJOHCZ#FIEBE&TGBICPE IUUQCFIEBEPSHUFYU ໓Чᛴಙඌ֥၂Ց؋੪ྛCZ+JBOH+JBOH IUUQKKHPEPSHEPDTTMJEFTUFYUSFOEFSJOHUFDIQEG %JTUBODF'JFMEሳุᛴಙඌࢺകCZ:PBOO-PQFT IUUQMBCTRUOPLJBDPNUFYUSFOEFSJOHJOUIF RNMTDFOFHSBQI 23BX'POUა2(MZQI3VOࢺകCZ&TLJM"CSBIBNTFO#MPNGFMEU IUUQMBCTRUOPLJBDPNIJOUIJOUOVEHFOVEHF
TBZOPNPSF 24UBUJD5FYUࢺകCZ&TLJM"CSBIBNTFO IUUQMBCTRUOPLJBDPNJOTBOJUZJTTIBQJOHUIF TBNFUFYUBHBJOBOEFYQFDUJOHBEJGGFSFOUSFTVMU • • • • •
໙ีĤ