QT开发中文网

QPainter 显示图像, 支持缩放,平移操作

在使用 QPainter 显示图像时,如果想要实现缩放和平移的功能,可以结合 QGraphicsViewQGraphicsScene 来实现。这种方法可以方便地处理图形项的变换。以下是一个简单的示例代码,演示如何使用 QPainter 以及支持缩放和平移操作:

示例代码

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QWheelEvent>
#include <QKeyEvent>

class ImageView : public QGraphicsView {
    Q_OBJECT

public:
    ImageView(QWidget *parent = nullptr) : QGraphicsView(parent), scaleFactor(1.0) {
        scene = new QGraphicsScene(this);
        setScene(scene);

        // 加载并显示图片
        QPixmap pixmap("path/to/your/image.jpg");
        imageItem = scene->addPixmap(pixmap);
        
        // 设置视图背景颜色(可选)
        setBackgroundBrush(Qt::black);
        
        // 启用鼠标跟踪
        setMouseTracking(true);
    }

protected:
    void wheelEvent(QWheelEvent *event) override {
        // 缩放处理
        if (event->angleDelta().y() > 0)
            scaleImage(1.2); // 放大
        else
            scaleImage(1 / 1.2); // 缩小
    }

    void keyPressEvent(QKeyEvent *event) override {
        switch (event->key()) {
            case Qt::Key_Left:
                translateImage(-10, 0); // 向左平移
                break;
            case Qt::Key_Right:
                translateImage(10, 0); // 向右平移
                break;
            case Qt::Key_Up:
                translateImage(0, -10); // 向上平移
                break;
            case Qt::Key_Down:
                translateImage(0, 10); // 向下平移
                break;
            default:
                QGraphicsView::keyPressEvent(event);
        }
    }

private:
    QGraphicsScene *scene;
    QGraphicsPixmapItem *imageItem;
    qreal scaleFactor;

    void scaleImage(qreal factor) {
        scaleFactor *= factor;
        
        // 确保不会无穷缩放,限制最大和最小值。
        if (scaleFactor < 0.1) scaleFactor = 0.1; 
        if (scaleFactor > 5.0) scaleFactor = 5.0; 

        imageItem->setScale(scaleFactor);
    }

    void translateImage(qreal dx, qreal dy) {
        QPointF pos = imageItem->pos();
        imageItem->setPos(pos.x() + dx, pos.y() + dy);
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    ImageView view;
    view.setWindowTitle("Image Viewer with Zoom and Pan");
    view.resize(800, 600);
    view.show();

    return app.exec();
}

#include "main.moc"

使用说明

  • "path/to/your/image.jpg" 替换为实际的图片路径。
  • 使用鼠标滚轮进行缩放。
  • 使用键盘的上下左右方向键进行平移。

注意事项

  • 确保已安装 Qt 开发环境,并能够成功编译运行该程序。
  • 可以根据需要调整缩放和移动的步长,以满足具体需求。


    内容由零声教学AI助手提供,问题来源于学员提问
目录导航
  • 示例代码
  • 使用说明
  • 注意事项
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=12662

    分享:
    扫描分享到社交APP
    上一篇
    下一篇
    发表列表
    游客 游客
    此处应有掌声~
    评论列表

    还没有评论,快来说点什么吧~

    联系我们

    在线咨询: 点击这里给我发消息

    微信号:3007537140

    上班时间: 10:30-22:30

    关注我们
    x

    注册

    已经有帐号?