日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Qt】2D绘图之绘图中其它问题

發(fā)布時間:2024/4/24 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Qt】2D绘图之绘图中其它问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 概述
    • 02. 開發(fā)環(huán)境
    • 03. 重繪事件
    • 04. 剪切
    • 05. 播放gif動畫
    • 06. 渲染SVG文件
    • 07. 附錄

01. 概述

02. 開發(fā)環(huán)境

Windows系統(tǒng):Windows10

Qt版本:Qt5.15或者Qt6

03. 重繪事件

前面講到的所有繪制操作都是在重繪事件處理函數(shù)paintEvent()中完成的,是QWidget類中定義的函數(shù)。一個重繪事件用來重繪一個部件的全部或者部分區(qū)域,下面幾個原因中的任意一個都會發(fā)生重繪事件:

  • repaint()函數(shù)或者update()函數(shù)被調(diào)用;
  • 被隱藏的部件現(xiàn)在被重新顯示;
  • 其他一些原因。

大部分部件可以簡單地重繪它們的全部界面,但是一些繪制比較慢的部件需要進(jìn)行優(yōu)化而只繪制需要的區(qū)域(可以使用QPaintEvent::region()來獲取該區(qū)域)。Qt也會通過合并多個重繪事件為一個事件來加快繪制,當(dāng)update()函數(shù)被調(diào)用多次,或者窗口系統(tǒng)發(fā)送了多個重繪事件,那么Qt就會合并這些事件成為一個事件,而這個事件擁有最大的需要重繪的區(qū)域。

update()函數(shù)不會立即進(jìn)行重繪,要等到Qt返回主事件循環(huán)后才會進(jìn)行,所以多次調(diào)用update()函數(shù)一般只會引起一次paintEvent()函數(shù)調(diào)用。而調(diào)用repaint()函數(shù)會立即調(diào)用paintEvent()函數(shù)來重繪部件,只有在必須立即進(jìn)行重繪操作的怡況下(比如在動畫中),才使用repaint()函數(shù)。update()允許Qt優(yōu)化速度和減少閃爍,但是repaint()函數(shù)不支持這樣的優(yōu)化,所以建議一般情況下盡可能使用update()函數(shù)。還要說明一下,在程序開始運行時就會自動發(fā)送重繪事件而調(diào)用paintEvent()函數(shù)。另外,不要在paintEvent()函數(shù)中調(diào)用update()或者repaint()函數(shù)。

當(dāng)重繪事件發(fā)生時,要更新的區(qū)域一般會被擦除,然后在部件的背景上進(jìn)行繪制。部件的背景一般可以使用setBackgroundRole()來指定,然后使用setAutoFillBackground(true)來啟用指定的顏色。例如使界面顯示比較深的顏色,可以在部件的構(gòu)造函數(shù)中添加如下代碼:

this->setBackgroundRole(QPalette::Dark); this->setAutoFillBackground(true);

04. 剪切

QPainter可以剪切任何的繪制操作,可以剪切一個矩形、一個區(qū)域或者一個路徑中的內(nèi)容,這分別可以使用setClipRect()、setClipRegion()和setClipPath()函數(shù)來實現(xiàn)。剪切會在QPainter的邏輯坐標(biāo)系統(tǒng)中進(jìn)行。下面的代碼實現(xiàn)了剪切一個矩形中的文字:

QPainter painter; painter.setClipRect(10, 0, 20, 10); painter.drawText(10, 10, tr("Hello Qt"));

05. 播放gif動畫

QMovie類是使用QlmageReader來播放動畫的類,使用它可以播放不帶聲音的簡單的動畫,它支持gif和mng文件格式。這個類提供了很方便的函數(shù)來進(jìn)行動畫的開始、暫停和停止等操作??梢詤⒖荚擃惖膸椭臋n,也可以查看一下Movie Player示例程序,它在Widgets分類中。

06. 渲染SVG文件

可縮放矢量圖形(Scalable Vector GraphiCS,SVG)是一個使用XML來描述二維圖形和圖形應(yīng)用程序的語言。在Qt中可以使用QSvgWidget類來很容易地加載一個SVG文件,而使用QSvgRenderer類在QSvgWidget中進(jìn)行SVG文件的渲染。這兩個類的使用很簡單,這里就不再講述??梢詤⒖家幌耂VG
Generator和SVG Viewer示例程序,它們都在Painting分類中

07. 附錄

總結(jié)

以上是生活随笔為你收集整理的【Qt】2D绘图之绘图中其它问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。