209_QT_画一个简单的圆【注意:setViewport、setWindow】

65 篇文章 7 订阅

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QLinearGradient>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
    resize(300,200);

}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)//去除event未使用的告警
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    int w = width();
    int h = height();

    int side = qMin(w,h);
    QRect rect((w-side)/2, (h-side)/2,side, side);/*圈一个正方形*/

    painter.drawRect(rect);/*画出来*/

                              /*不使用默认的了,你还是别映射到我整个绘图设备,你映射到我给你的那块区域*/
    painter.setViewport(rect);/*后续的操作图像,显示在我们指定的rect内,实际在窗口映射到窗口显示的区域*/
    painter.setWindow(-100, -100, 200,200);/*在rect内,人为给定的窗口坐标,绘制图形会随着窗口动态等比例变化*/

    QLinearGradient Gradient (0,0,100,0);
    Gradient.setColorAt(0, Qt::yellow);
    Gradient.setColorAt(1, Qt::green);
    Gradient.setSpread(QGradient::PadSpread);/*发散的样式设置颜色*/

    painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);/*混合样式*/
    //painter.setBrush(Gradient);/*制造一个渐变的黑白的变化*/
    for(int i = 0; i < 36; i++)
    {
        qDebug()<< i << endl;
        painter.drawEllipse(QPoint(50, 0), 50,50);/*围绕50:x点,0:y点画圆*/
        painter.rotate(10);

    }


}

在这里插入图片描述

Qt中的setViewport方法可以用于设置QAbstractScrollArea和QGraphicsView的视口大小和位置。它通常与setWidget或setScene方法一起使用以创建可滚动视图。 如果你想要使用setViewport实现缩放,你需要考虑以下几点: 1. 首先,你需要确定视口的大小和位置。 2. 然后,你需要确定如何缩放视口中的内容。你可以使用QTransform类的scale方法来缩放内容。 3. 最后,你需要将缩放后的内容设置为视口的widget或scene。 下面是一个使用setViewport实现缩放的示例代码片段: ``` QGraphicsView *view = new QGraphicsView(this); view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); view->setRenderHint(QPainter::Antialiasing); view->setDragMode(QGraphicsView::ScrollHandDrag); view->setOptimizationFlag(QGraphicsView::DontAdjustForAntialiasing); view->setInteractive(true); view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QGraphicsScene *scene = new QGraphicsScene(view); view->setScene(scene); QPixmap pixmap(":/images/image.png"); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap); scene->addItem(item); QTransform transform; transform.scale(2, 2); item->setTransform(transform); view->setSceneRect(item->boundingRect()); ``` 在这个例子中,我们使用QGraphicsView创建了一个视口,并为其设置了一些属性。然后,我们创建了一个QGraphicsScene,并将其设置为视口的scene。接下来,我们创建了一个QGraphicsPixmapItem,并将其添加到场景中。最后,我们使用QTransform类的scale方法将QGraphicsPixmapItem缩放了两倍,并将其设置为场景的边界矩形。 请注意,这只是一个简单的示例,实际上实现缩放可能需要更多的代码。同时,缩放可能会使内容变得模糊或失真,因此你需要找到一个合适的缩放比例来平衡视觉效果和性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扳手的海角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值