QT开发中文网

QPainter绘制可以鼠标拖动旋转的矩形 c++

要实现鼠标拖动旋转的矩形,你可以使用Qt中的QPainter来完成。下面是一个简单的示例代码:

#include <QApplication>
#include <QWidget>
#include <QMouseEvent>
#include <QPainter>

class RectWidget : public QWidget
{
public:
    RectWidget(QWidget *parent = nullptr) : QWidget(parent), angle(0)
    {
        setFixedSize(400, 400);
    }

protected:
    void paintEvent(QPaintEvent *)
    {
        QPainter painter(this);

        // 将坐标系原点移动到窗口中心
        painter.translate(width() / 2, height() / 2);
        
        // 根据角度旋转坐标系
        painter.rotate(angle);

        // 绘制矩形
        QRect rect(-50, -50, 100, 100);
        painter.drawRect(rect);
    }

    void mousePressEvent(QMouseEvent *event)
    {
        if (event->buttons() & Qt::LeftButton)
            startPos = event->pos();
    }

    void mouseMoveEvent(QMouseEvent *event)
    {
        if (event->buttons() & Qt::LeftButton)
            updateRotation(event->pos());
    }

private:
    void updateRotation(const QPoint &currentPos)
    {
        QPoint delta = currentPos - startPos;
        
        // 计算当前鼠标位置与起始位置之间的角度差,用于旋转矩形
        angle += qRadiansToDegrees(qAtan2(delta.y(), delta.x()));
        
        startPos = currentPos;
        
        // 刷新窗口绘制
        update();
    }
    
private:
    int angle;
    QPoint startPos;
};

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

    RectWidget rectWidget;
    rectWidget.show();

    return app.exec();
}

这个示例代码创建了一个继承自QWidget的自定义窗口类RectWidget,重写了paintEvent、mousePressEvent和mouseMoveEvent等事件处理函数。在paintEvent中使用QPainter进行绘制,通过鼠标事件更新角度,并刷新窗口进行矩形的旋转绘制。你可以根据需要修改矩形的大小、颜色等属性来适应你的需求。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?