最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt中QPainter實(shí)現(xiàn)繪制文本功能的示例代碼

 更新時(shí)間:2026年07月01日 08:51:11   作者:sycmancia  
本文介紹了Qt中QPainter繪制文本的功能及實(shí)現(xiàn)動(dòng)態(tài)文本效果的方法,文內(nèi)涵蓋drawText方法多種調(diào)用形式,QFont、QColor參數(shù)設(shè)置等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

QPainter擁有繪制文本的能力

drawText(擁有多個(gè)重載形式)

常見(jiàn)調(diào)用方式

  • p.drawText(10, 10, "hello"):在坐標(biāo)(10,10)處繪制文本
  • p.drawText(0, 0, 100, 30,  Qt::AlignCenter, "hello"):在矩形范圍(0,0,100,30)中以居中對(duì)齊的方式繪制文本

文本繪制參數(shù)

字體(QFont),顏色(QColor):控制文本大小、風(fēng)格、顏色等

坐標(biāo)(QPoint),角度(rotate)

  • 文本繪制的位置(對(duì)齊該坐標(biāo))
  • 以繪制坐標(biāo)為圓心順時(shí)針旋轉(zhuǎn)

完整代碼

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

protected:
    void paintEvent(QPaintEvent *);

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget() override;
};
#endif // WIDGET_H

Widget.cpp

#include "Widget.h"
#include <QPainter>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{

}

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);

    painter.save(); //保存之前的狀態(tài)(顏色、字體、角度)

    painter.setPen(Qt::black);
    painter.setFont(QFont("Arial", 16));
    painter.rotate(0);
    painter.drawText(30, 40, "Hello");

    painter.setPen(Qt::red);
    painter.setFont(QFont("Comic Sans MS", 20));
    painter.rotate(20);
    painter.drawText(30, 40, "Hello");

    painter.restore(); //恢復(fù)保存時(shí)的狀態(tài)
    painter.drawText(130, 140, "hello");

}
Widget::~Widget() = default;

運(yùn)行結(jié)果:

示例:繪制一個(gè)字體從屏幕中間慢慢放大的效果

步驟:

  • 在主窗口中繪制文本
  • 將文本中心繪制于窗口中心(width()/2, height()/2)
  • 動(dòng)畫效果通過(guò)連續(xù)控制字體參數(shù)完成(Font)
  • 通過(guò)計(jì)時(shí)器強(qiáng)行更新文本繪制(QTimer)

小技巧:通過(guò)QFontMetrics獲取字符串在指定字體下的寬度和高度

//指定字體
QFontMetrics metrics(font);
//獲取指定字體下相應(yīng)字符串寬度
int w = metrics.width(text);
//獲取指定字體的字符高度
int h = metrics.height();

所以坐標(biāo)計(jì)算為:x = width/2 - w/2        y = height/2 - h/2

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>

class Widget : public QWidget
{
    Q_OBJECT

    int m_sizeFactor;
    QTimer m_timer;

protected slots:
    void onTimeout();
protected:
    void paintEvent(QPaintEvent* );
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget() override;
};
#endif // WIDGET_H

Widget.cpp

#include "Widget.h"
#include <QPainter>
#include <QFontMetrics>
#include <QPoint>
#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()));

    //定時(shí)器啟動(dòng)后,每 50ms 觸發(fā)一次 timeout 信號(hào),調(diào)用一次 onTimeout ()
    m_timer.start(50);
}

void Widget::onTimeout()
{
    update();
}

void Widget::paintEvent(QPaintEvent* )
{
    QPainter painter;
    const QString text = "Hello";
    QFont font("Comic Sans MS", 5 + (m_sizeFactor++) % 100);
    //用來(lái)計(jì)算當(dāng)前字體下文字的實(shí)際寬、高
    QFontMetrics metrics(font);
    const int w = metrics.width(text);
    const int h = metrics.height();
    // 計(jì)算文字繪制矩形位置:水平居中、豎直居中,矩形寬高等于文字寬高
    QRect rect((width()-w)/2, (height()-w)/2, w, h);
    
    // 指定繪圖設(shè)備為當(dāng)前窗口 this,正式開始繪圖
    painter.begin(this);
    painter.setPen(Qt::blue);
    painter.setFont(font);
    painter.drawText(rect, Qt::AlignCenter, text);
    painter.end();
}
Widget::~Widget() = default;

到此這篇關(guān)于Qt中QPainter實(shí)現(xiàn)繪制文本功能的示例代碼的文章就介紹到這了,更多相關(guān)Qt QPainter繪制文本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言 解壓華為固件的實(shí)例代碼

    C語(yǔ)言 解壓華為固件的實(shí)例代碼

    這是解壓華為固件(update.app)的C語(yǔ)言。。其實(shí)這也是我翻115翻出來(lái)的。。。
    2013-08-08
  • C++編程中的格式化輸出詳解

    C++編程中的格式化輸出詳解

    這篇文章主要介紹了C++編程中的格式化輸出詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    這篇文章主要介紹了Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程 ,需要的朋友可以參考下
    2020-02-02
  • C++中名稱空間namespace的使用方法示例

    C++中名稱空間namespace的使用方法示例

    namespace中文意思是命名空間或者叫名字空間,下面這篇文章主要給大家介紹了關(guān)于C++中名稱空間namespace使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。
    2017-12-12
  • QT使用SQLite數(shù)據(jù)庫(kù)超詳細(xì)教程(增刪改查、對(duì)大量數(shù)據(jù)快速存儲(chǔ)和更新)

    QT使用SQLite數(shù)據(jù)庫(kù)超詳細(xì)教程(增刪改查、對(duì)大量數(shù)據(jù)快速存儲(chǔ)和更新)

    這篇文章主要給大家介紹了關(guān)于QT使用SQLite數(shù)據(jù)庫(kù)的相關(guān)資料,其中包括增刪改查以及對(duì)大量數(shù)據(jù)快速存儲(chǔ)和更新,SQLite是一種嵌入式關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它是一個(gè)軟件庫(kù),提供了一個(gè)自包含、無(wú)服務(wù)器、零配置的、事務(wù)性的SQL數(shù)據(jù)庫(kù)引擎,需要的朋友可以參考下
    2024-01-01
  • C++如何使用new來(lái)初始化指向類的指針

    C++如何使用new來(lái)初始化指向類的指針

    這篇文章主要介紹了C++如何使用new來(lái)初始化指向類的指針問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C語(yǔ)言結(jié)構(gòu)體超詳細(xì)講解

    C語(yǔ)言結(jié)構(gòu)體超詳細(xì)講解

    C語(yǔ)言結(jié)構(gòu)體(Struct)從本質(zhì)上講是一種自定義的數(shù)據(jù)類型,只不過(guò)這種數(shù)據(jù)類型比較復(fù)雜,是由?int、char、float?等基本類型組成的。你可以認(rèn)為結(jié)構(gòu)體是一種聚合類型
    2022-04-04
  • C++中string使用+號(hào)與int拼接方式

    C++中string使用+號(hào)與int拼接方式

    這篇文章主要介紹了C++中string使用+號(hào)與int拼接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++堆和棧的區(qū)別與聯(lián)系講解

    C++堆和棧的區(qū)別與聯(lián)系講解

    今天小編就為大家分享一篇關(guān)于C++堆和棧的區(qū)別與聯(lián)系講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • 提升編程能力的C語(yǔ)言技巧總結(jié)

    提升編程能力的C語(yǔ)言技巧總結(jié)

    這篇文章主要為大家總結(jié)了一些C語(yǔ)言技巧的相關(guān)資料,可以幫助大家大大提升編程能力。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12

最新評(píng)論

阿拉尔市| 赞皇县| 上饶县| 长子县| 石屏县| 乐业县| 红桥区| 香港 | 万盛区| 荆州市| 广宗县| 象山县| 渝北区| 盐亭县| 岐山县| 宜都市| 新田县| 建瓯市| 安溪县| 娄烦县| 勃利县| 浙江省| 九台市| 卫辉市| 洞头县| 闸北区| 达尔| 漯河市| 浮梁县| 元氏县| 开阳县| 榆社县| 贡嘎县| 无锡市| 广安市| 福安市| 白玉县| 教育| 公主岭市| 新竹市| 绥芬河市|