Qt中的文本绘制
文章目錄
- 1 Qt中的文本繪制
- 1.1 文本繪制簡介
- 1.2 實現文字逐漸變大的效果
1 Qt中的文本繪制
1.1 文本繪制簡介
QPainter擁有繪制文本的能力:
- drawText(擁有多個重載形式)。
- 常見調用方式:
文本繪制參數:
- 字體(QFont)、顏色(QColor):
- 控制文本大小、風格、顏色等。
- 坐標(QPoint)、角度(rotate):
- 文本繪制的位置(對齊該坐標)。
- 以繪制坐標為圓心順時針旋轉。
文本繪制示例:
簡單文本繪制:
Widget.h:
Widget.cpp:
#include "Widget.h" #include <QPainter>Widget::Widget(QWidget *parent): QWidget(parent) { }void Widget::paintEvent(QPaintEvent *) {QPainter painter(this);painter.save();painter.setPen(Qt::black);painter.setFont(QFont("Arial", 16));painter.rotate(0);painter.drawText(30, 40, "D.T.Software");painter.setPen(Qt::red);painter.setFont(QFont("Comic Sans MS", 20));painter.rotate(20);painter.drawText(30, 40, "D.T.Software");painter.restore();painter.drawText(130, 140, "D.T.Software"); }Widget::~Widget() {}main.cpp:
#include <QtGui/QApplication> #include "Widget.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }1.2 實現文字逐漸變大的效果
解決方案分析:
小技巧:
- 通過QFontMetrics獲取字符串在指定字體下的寬度和高度。
坐標計算:
實現如下:
Widget.h:
#ifndef WIDGET_H #define WIDGET_H#include <QtGui/QWidget> #include <QTimer>class Widget : public QWidget {Q_OBJECTint m_sizeFactor;QTimer m_timer; protected slots:void onTimeout(); protected:void paintEvent(QPaintEvent *); public:Widget(QWidget *parent = 0);~Widget(); };#endif // WIDGET_HWidget.cpp:
#include "Widget.h" #include <QPainter> #include <QFontMetrics> #include <QFont> #include <QRect>Widget::Widget(QWidget *parent): QWidget(parent) {m_sizeFactor = 0;m_timer.setParent(this);connect(&m_timer, SIGNAL(timeout()), this, SLOT(onTimeout()));m_timer.start(50); }void Widget::onTimeout() {update(); }void Widget::paintEvent(QPaintEvent *) {QPainter painter;const QString text = "D.T.Software";QFont font("Comic Sans MS", 5 + (m_sizeFactor++) % 100);QFontMetrics metrics(font);const int w = metrics.width(text);const int h = metrics.height();QRect rect((width()-w)/2, (height()-h)/2, w, h);painter.begin(this);painter.setPen(Qt::blue);painter.setFont(font);painter.drawText(rect, Qt::AlignCenter, text);painter.end(); }Widget::~Widget() {}main.cpp:
#include <QtGui/QApplication> #include "Widget.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }參考資料:
總結
- 上一篇: 杉怎么读啊?
- 下一篇: 为什么我们家的蚊子总是飞到我们头上?