Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Text Layout with Qt

Jiang Jiang
December 12, 2011

Text Layout with Qt

A talk presented in Chinese about the text layout support in Qt framework.

Jiang Jiang

December 12, 2011
Tweet

More Decks by Jiang Jiang

Other Decks in Technology

Transcript

  1. ਙԛॖ࿊ሳุ  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) ...
  2. $."1  ሳژ DIBSBDUFS ሳྙ෬ႄ HMZQI 6 '  6

    %  6   6    
  3. 2'POU.FUSJDT  QFont f("STHeiti"); QFontMetrics m(f); QString str = QString::fromUtf8("Qt");

    m.boundingRect(str); m.height(); m.ascent(); m.descent(); ... ๤၂ࠆ౼ ሳएྐ༏ ֥ٚൔ
  4. ୆ݺ2U֥ए৖ྐ༏  ሳژ ሳྙ෬ႄ BEWBODF QY ჰ໊ׄᇂ ࡌഡ  ູఏׄ

    ୆     ݺ     2     U    
  5. 

  6. ۲௜෻༯֥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
  7.  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();
  8.  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")); } };
  9.  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; };
  10.  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));
  11.  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]);