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

Text Layout with Qt

Avatar for Jiang Jiang Jiang Jiang
December 12, 2011

Text Layout with Qt

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

Avatar for Jiang Jiang

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]);