提交 33b5709c 编写于 作者: mahuifa's avatar mahuifa

新功能:完成QTransformDemo部分功能

    1、打印部分输出信息;
    2、实现滑动条控制平移原点功能。
上级 00dda067
#include "renderarea.h"
#include <QDebug>
#include <qpainter.h>
RenderArea::RenderArea(QWidget *parent) : QWidget(parent)
......@@ -8,6 +8,7 @@ RenderArea::RenderArea(QWidget *parent) : QWidget(parent)
this->setBackgroundRole(QPalette::Base);
this->setAutoFillBackground(true);
showData();
}
RenderArea::~RenderArea()
......@@ -22,9 +23,27 @@ RenderArea::~RenderArea()
void RenderArea::setTransform(const QTransform &transform)
{
m_transform = transform;
showData();
this->update();
}
void RenderArea::showData()
{
qDebug() << "-----------------------打印信息-----------------------";
qDebug() << "矩阵元素:" << QString("[%1, %2, %3][%4, %5, %6][%7, %8, %9]")
.arg(m_transform.m11()).arg(m_transform.m12()).arg(m_transform.m13()) // 水平缩放、垂直剪切、水平投影
.arg(m_transform.m21()).arg(m_transform.m22()).arg(m_transform.m23()) // 水平剪切、垂直缩放、垂直投影
.arg(m_transform.m31()).arg(m_transform.m32()).arg(m_transform.m33()); // 水平平移、垂直平移、投影因子
qDebug() << "转换类型:" << m_transform.type();
qDebug() << "仿射变换:" << m_transform.isAffine();
qDebug() << "单位矩阵(TxNone):" << m_transform.isIdentity();
qDebug() << "矩阵可逆:" << m_transform.isInvertible();
qDebug() << "矩阵旋转:" << m_transform.isRotating();
qDebug() << "矩阵缩放:" << m_transform.isScaling();
qDebug() << "矩阵偏移:" << m_transform.isTranslating();
}
void RenderArea::paintEvent(QPaintEvent *event)
{
......
......@@ -12,7 +12,8 @@ public:
void setTransform(const QTransform &transform);
signals:
private:
void showData();
protected:
void paintEvent(QPaintEvent *event) override;
......
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
......@@ -7,10 +8,11 @@ Widget::Widget(QWidget *parent)
{
ui->setupUi(this);
m_transform.translate(50, 50);
m_transform.rotate(10);
m_transform.scale(1, 1.0);
// m_transform.translate(50, 50);
// m_transform.rotate(10);
// m_transform.scale(0.5, 1);
ui->renderArea->installEventFilter(this);
}
Widget::~Widget()
......@@ -19,17 +21,70 @@ Widget::~Widget()
}
/**
* @brief 获取反转副本
* @param checked
* @brief 事件过滤器
* @param watched
* @param event
* @return
*/
void Widget::on_checkBox_transform_clicked(bool checked)
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
if(checked)
if(watched == ui->renderArea && event->type() == QEvent::Resize)
{
ui->renderArea->setTransform(m_transform.inverted());
}
else
{
ui->renderArea->setTransform(m_transform);
ui->horizontalSlider_origin->setMaximum(ui->renderArea->width());
ui->verticalSlider_origin->setMaximum(ui->renderArea->height());
ui->horizontalSlider_origin->setValue(0);
ui->verticalSlider_origin->setValue(ui->renderArea->height());
}
return QWidget::eventFilter(watched, event);
}
/**
* @brief 设置原始变换
*/
void Widget::on_but_original_clicked()
{
ui->renderArea->setTransform(m_transform);
}
/**
* @brief 重置QTransform
*/
void Widget::on_but_reset_clicked()
{
m_transform.reset();
ui->renderArea->setTransform(m_transform);
}
/**
* @brief 获取反转副本
*/
void Widget::on_but_transform_clicked()
{
ui->renderArea->setTransform(m_transform.inverted());
}
/**
* @brief 水平偏移原点
* @param value
*/
void Widget::on_horizontalSlider_origin_valueChanged(int value)
{
static int pastValue = 0;
m_transform.translate(value - pastValue, 0); // 由于QTransform设置时累加的,所以这里需要通过pastValue计算差值
pastValue = value;
ui->renderArea->setTransform(m_transform);
}
/**
* @brief 垂直偏移原点
* @param value
*/
void Widget::on_verticalSlider_origin_valueChanged(int value)
{
static int pastValue = 0;
m_transform.translate(0, ui->verticalSlider_origin->maximum() - value - pastValue);
pastValue = ui->verticalSlider_origin->maximum() - value;
ui->renderArea->setTransform(m_transform);
}
......@@ -15,8 +15,20 @@ public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
bool eventFilter(QObject *watched, QEvent *event) override;
private slots:
void on_checkBox_transform_clicked(bool checked);
void on_but_reset_clicked();
void on_but_transform_clicked();
void on_but_original_clicked();
void on_horizontalSlider_origin_valueChanged(int value);
void on_verticalSlider_origin_valueChanged(int value);
private:
Ui::Widget *ui;
......
......@@ -14,40 +14,53 @@
<string>Widget</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="1">
<widget class="QSlider" name="horizontalSlider_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QDial" name="dial"/>
</item>
<item row="1" column="1" colspan="3">
<widget class="RenderArea" name="renderArea" native="true"/>
</item>
<item row="1" column="0">
<widget class="QSlider" name="verticalSlider">
<widget class="QSlider" name="verticalSlider_origin">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QPushButton" name="but_reset">
<property name="text">
<string>重置</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="but_transform">
<property name="text">
<string>反转</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="3">
<widget class="QSlider" name="horizontalSlider">
<widget class="QSlider" name="horizontalSlider_origin">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QCheckBox" name="checkBox_transform">
<item row="3" column="2">
<widget class="QPushButton" name="but_original">
<property name="text">
<string>反转Transform</string>
<string>原始</string>
</property>
</widget>
</item>
<item row="2" column="3" rowspan="4">
<widget class="QDial" name="dial"/>
</item>
</layout>
</widget>
<customwidgets>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册