Qt绘图事件: 坐标系统(平移 旋转 缩放 扭曲)讲解

ui界面

在这里插入图片描述
四个水平滑动块,拖动它们,分别实现平移 旋转 缩放 扭曲

效果

在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QBrush>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

protected:
    void paintEvent(QPaintEvent *);	//绘图事件
private slots:
    void on_SliderTranslate_sliderMoved(int position);
    void on_SliderRotate_sliderMoved(int position);
    void on_SliderScale_actionTriggered(int action);
    void on_sliderShear_actionTriggered(int action);
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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

void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);
    QPen pen(QColor(Qt::black));
    QBrush brush(QColor(Qt::white));

    painter.setPen(pen);
    painter.setBrush(brush);
    painter.drawRect(QRect(0,0,width()*2/3,height()));
    brush.setColor(Qt::blue);
    painter.setBrush(brush);
    //平移 斜下方平移  参数:x轴平移  y轴平移
    painter.translate(ui->SliderTranslate->value(),ui->SliderTranslate->value());
    //旋转  坐标轴旋转
    painter.rotate(ui->SliderRotate->value());
    //缩放  0~3
    painter.scale(ui->SliderScale->value()/33.0, ui->SliderScale->value()/33.0);
    //扭曲 扭曲系数0~1
    painter.shear(ui->sliderShear->value()/99.0,ui->sliderShear->value()/99.0);

    painter.drawRect(0,0,100,100);  //画100 * 100 的矩形
}
//以下四个函数对应slider的槽函数 都是数值改变更新绘图事件
void Widget::on_SliderTranslate_sliderMoved(int position)
{
    update();
}

void Widget::on_SliderRotate_sliderMoved(int position)
{
    update();
}

void Widget::on_SliderScale_actionTriggered(int action)
{
    update();
}

void Widget::on_sliderShear_actionTriggered(int action)
{
    update();
}
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt中的逻辑坐标和物理坐标是两种不同的坐标系。 逻辑坐标是相对于Qt应用程序的窗口的坐标系。它是与应用程序的界面大小相关的坐标系,可以通过该坐标系来进行图形绘制、事件处理等操作。逻辑坐标可以使用像素、百分比等单位进行表示,具有一定的抽象性。 物理坐标是相对于屏幕或设备的坐标系。它是与实际显示设备的像素大小相关的坐标系,用于确定真实的显示位置和大小。物理坐标通常使用像素作为单位进行表示,具有客观的实际意义。 在Qt中,通过QPainter等绘图工具可以在逻辑坐标系下进行绘制操作。可以通过设置Qt应用程序的窗口大小和缩放因子来调整逻辑坐标与实际显示像素之间的映射关系,实现适应不同分辨率和显示设备的界面布局。同时,Qt还提供了方便的坐标转换函数,可以在逻辑坐标系和物理坐标系之间进行转换。 总之,Qt中的逻辑坐标和物理坐标是两种不同的坐标系,分别用于应用程序界面的绘制操作和实际显示设备的显示位置确定。合理使用逻辑坐标和物理坐标可以帮助开发者实现跨平台、适应不同分辨率的应用程序界面。 ### 回答2: 在Qt中,有两种坐标系:逻辑坐标和物理坐标。 逻辑坐标是相对于绘图设备的坐标系,它是独立于具体的硬件设备的。在Qt中,逻辑坐标的原点通常位于绘图设备的左上角,水平向右为正方向,垂直向下为正方向。逻辑坐标可以用于设置图形的位置和大小,以及进行绘图操作。例如,可以通过设置逻辑坐标来实现平移缩放旋转等操作,使得绘制的图形能够适应不同的显示设备。 物理坐标是相对于实际物理设备的坐标系,它与硬件设备相关。物理坐标的原点和方向可能与逻辑坐标不同,根据不同的设备和操作系,原点位置和轴的方向可能有所不同。物理坐标通常用于获取设备的实际位置和大小,以及进行与设备相关的操作,例如打印输出和屏幕截图等。 在Qt中,可以通过使用转换函数来在逻辑坐标和物理坐标之间进行转换。例如,可以使用QTransform类中的函数来将逻辑坐标转换为物理坐标,或者将物理坐标转换为逻辑坐标。通过使用这些转换函数,可以在不同的坐标系之间进行切换,以适应不同的需求和设备。 ### 回答3: qt中的逻辑坐标和物理坐标是两种不同的坐标系。 逻辑坐标是在程序中使用的坐标系,用于定位和绘制图形界面元素。在逻辑坐标系中,坐标的原点通常是左上角,x轴向右增加,y轴向下增加。逻辑坐标的单位可以是像素,也可以是任意自定义的单位。使用逻辑坐标可以使得界面在不同分辨率的屏幕上以相同的比例显示,从而实现界面的自适应性。 物理坐标是与实际硬件设备相关的坐标系,用于定位物理位置。物理坐标的原点和方向通常由硬件设备决定,例如屏幕的原点可能是左上角,也可能是左下角,坐标轴的方向也可能与逻辑坐标相反。物理坐标的单位通常是像素。使用物理坐标可以精确地定位物理位置,但在不同分辨率的屏幕上可能会导致界面显示的比例不一致。 在Qt中,通过QPainter类可以方便地在逻辑坐标系中进行绘制操作。在绘制过程中,可以使用QTransform类来进行逻辑坐标到物理坐标之间的转换。Qt还提供了QScreen类来获取和管理物理坐标系相关的信息。 总之,逻辑坐标和物理坐标是两种不同的坐标系,用于在软件中定位和绘制界面元素以及在硬件设备上定位物理位置。在Qt中,可以使用逻辑坐标和物理坐标来实现界面的自适应和精确定位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值