QT开发中文网

QGraphicsView以鼠标位置进行放缩,用C++实现

以下是一个基于QGraphicsView的放缩示例(使用鼠标滚轮):

#include <QtWidgets>

class GraphicsView : public QGraphicsView
{
public:
    GraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent)
    {
        setRenderHint(QPainter::Antialiasing);
        setDragMode(QGraphicsView::ScrollHandDrag);
        setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
    }

protected:
    void wheelEvent(QWheelEvent *event) override
    {
        if (event->modifiers() & Qt::ControlModifier) {
            double scaleFactor = 1.15;
            if (event->angleDelta().y() < 0) {
                scaleFactor = 1.0 / scaleFactor;
            }
            scale(scaleFactor, scaleFactor);
            event->accept();
        } else {
            QGraphicsView::wheelEvent(event);
        }
    }
};

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

    QGraphicsScene scene;
    QGraphicsRectItem *rectItem = scene.addRect(QRectF(-50, -50, 100, 100), QPen(), QBrush(Qt::red));
    QGraphicsTextItem *textItem = scene.addText("Hello, world!");

    GraphicsView view;
    view.setScene(&scene);
    view.setRenderHint(QPainter::Antialiasing);
    view.show();

    return app.exec();
}

在此示例中,我们重写了QGraphicsView的wheelEvent()函数,以便在按下Ctrl键时进行放缩。如果未按下Ctrl键,则调用父类实现。setScale()函数将引起视图的重新绘制,并且由于我们设置了setViewportUpdateMode(QGraphicsView::FullViewportUpdate),因此整个视图将被重新绘制。最后,我们创建了一个GraphicsView对象,并使用QGraphicsScene添加了两个项目:矩形和文本。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=630

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?