1. 程式人生 > 其它 >Qt-顯示SVG格式圖片

Qt-顯示SVG格式圖片

    SVG(Scalable Vector Graphics),即可縮放的向量圖形,是規範中的網格向量圖形標準,是一個開放的圖形標準,有以下特點:

  • 基於XML表示的向量圖形檔案
  • 採用文字來描述物件
  • 具有互動型和動態性
  • 完全支援DOM

    SVG相對於GIF、JPEG格式的優勢如下:

  • 檔案小,對於網路而言,下載速度快
  • 可任意縮放而不會破壞影象的清晰度和細節
  • 影象中的文字獨立於影象,文字保留可編輯和可搜尋狀態,也沒有字型限制,使用者系統即使沒用安裝某一字型,也可看到與製作時完全相同的畫面等

    Qt為SVG格式圖片的顯示與生成提供了專門的QtSvg模組,包含QSvgWidget、QSvgRender、QGraphicsSvgItem

1. 新增標頭檔案:#include <QtSvg>

2. 響應滑鼠的滾輪事件,使SVG圖片能夠通過滑鼠滾輪的滾動進行播放:void wheelEvent(QWheelEvent *);

void wheelEvent(QWheelEvent* e)
{
    const double diff = 0.1;  //diff的值表示每次滾輪滾動一定的值,圖片大小改變的比例
    QSize size = render()->defaultSize();  //獲取圖片顯示區的尺寸,以便進行縮放操作
    int width = size.width();
    int height = size.height();
    //QWheelEvent的delta()函式獲得滾輪滾動的距離值,若距離值>0,則表示滾輪向前(遠離使用者的方向)滾動,反之表示向後(靠近使用者的方向)滾動
    //滑鼠滾動事件,滾輪每滾動1°,相當於移動8°,常見的滾輪滑鼠撥動一下滾動的角度為15°,所以滾輪波動一下相當於移動了120(=15 * 8)°
    if(e->delta() > 0)
    {
        //對圖片的長、寬值進行處理,放大一定比例
        width = int(this->width() + this->width() * diff);
        height = int(this->height() + this->height() * diff);
    }
    else
    {
        //對圖片的長、寬值進行處理,縮小一定比例
        width = int(this->width() - this->width() * diff);
        height = int(this->height() - this->height() * diff);
    }
    
    //利用新的長、寬值對圖片進行resize()操作
    resize(width, height);
}