iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Software Development

Qt 6 跨平台應用程式開發系列 第 23

D23: 看圖軟體(十一) 縮放圖片

  • 分享至 

  • xImage
  •  

在看圖軟體裡,縮放並滾動查看圖片是很常見的需求。

今天我們就來實現這個重要的功能:縮放圖片 (Zoom in/Zoom out)。

QWheelEvent 滑鼠滾輪事件

要實現滾輪縮放,首先要知道 Qt 是怎麼監聽滑鼠滾輪事件的。其實 QWidget 原本就可以接收某些固定的事件,滾輪實現就是其中之一。物件名字叫做 QWeelEvent

這就是滾輪事件的基本用法,只要 QWidget 複寫 wheelEvent(QWheelEvent* event) 方法,就可以收到滾輪事件:

void MyWidget::wheelEvent(QWheelEvent* event)
{
    QPoint numPixels = event->pixelDelta();
    QPoint numDegrees = event->angleDelta() / 8;

    if (!numPixels.isNull()) {
        qDebug() << numPixels;
    }
    event->accept();
}

實現圖片縮放

請打開昨天的專案。

首先我們先設定 m_imageLabel,讓內部的圖片會隨著圖片標籤尺寸變動而跟著縮放:

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
{
    m_imageLabel = new QLabel(this);
    m_imageLabel->setBackgroundRole(QPalette::Base);
    m_imageLabel->setScaledContents(true); // 這裡!
    ...

接著覆寫 wheelEvent() 方法:


void MainWindow::wheelEvent(QWheelEvent* event)
{
    QPoint numPixels = event->pixelDelta();
    if (!numPixels.isNull()) {
        qDebug() << "Pixels:" <<  numPixels;
        m_imageLabel->size();
        QSize oldSize = m_imageLabel->size(); //->pixmap().size();
        if (numPixels.y() > 0)
        {
            m_imageLabel->resize(oldSize * 1.1);
        }
        else if (numPixels.y() < 0)
        {
            m_imageLabel->resize(oldSize * 0.95);
        }
    }
    event->accept();
}

滾輪的Y軸數值是正值的時候,就把圖片尺寸放大,負值時就減小,這樣就完成圖片縮放功能囉!


上一篇
D22: 看圖軟體(十) 彈出視窗
下一篇
D24: 如何閱讀  Qt 官方文件
系列文
Qt 6 跨平台應用程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言