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

新功能:完成TransformDemo

上级 5a468583
......@@ -62,7 +62,7 @@ void RenderArea::paintEvent(QPaintEvent *event)
painter.setTransform(m_transform); // 设置QTransform
// 画一个矩形
QRect rect(200, 100, 200, 200);
QRect rect(-100, -100, 200, 200);
painter.drawRect(rect);
painter.setFont(QFont("黑体", 25, QFont::Bold));
......
......@@ -8,9 +8,7 @@ Widget::Widget(QWidget *parent)
{
ui->setupUi(this);
// m_transform.translate(50, 50);
// m_transform.rotate(10);
// m_transform.scale(0.5, 1);
this->setWindowTitle("QTransform偏移原点、旋转、缩放功能Demo");
ui->renderArea->installEventFilter(this);
}
......@@ -30,7 +28,7 @@ bool Widget::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->renderArea && event->type() == QEvent::Resize)
{
reset();
on_but_reset_clicked();
}
return QWidget::eventFilter(watched, event);
......@@ -63,8 +61,8 @@ void Widget::on_but_original_clicked()
*/
void Widget::on_but_reset_clicked()
{
m_transform.reset();
reset();
m_transform.reset();
ui->renderArea->setTransform(m_transform);
}
......@@ -107,16 +105,30 @@ void Widget::on_verticalSlider_origin_valueChanged(int value)
}
/**
* @brief 设置旋转功能
* @brief 设置旋转功能,虽然说支持XAxis、YAxis,但似乎有bug,旋转后就无法还原
* @param value
*/
void Widget::on_dial_valueChanged(int value)
{
static int pastValue = 0;
pastValue = m_transform.isIdentity() ? 0 : pastValue;
m_transform.rotate(-pastValue); // 由于QTransform中rotate是累计的,所以在设置之前这里进行重置
m_transform.rotate(-pastValue, Qt::ZAxis); // 由于QTransform中rotate是累计的,所以在设置之前这里进行重置
pastValue = ((value + 90) % 360);
m_transform.rotate(pastValue); // 由于QDial默认0为竖直向下方向,QPainter默认0度为向右,所以需要+90度
m_transform.rotate(pastValue, Qt::ZAxis); // 由于QDial默认0为竖直向下方向,QPainter默认0度为向右,所以需要+90度
ui->renderArea->setTransform(m_transform);
}
/**
* @brief 缩放
* @param value
*/
void Widget::on_horizontalSlider_scale_valueChanged(int value)
{
static int pastValue = 50;
qreal s = value > pastValue ? 1.1 : 0.9;
pastValue = value;
m_transform.scale(s, s);
ui->renderArea->setTransform(m_transform);
}
......@@ -35,6 +35,8 @@ private slots:
void on_dial_valueChanged(int value);
void on_horizontalSlider_scale_valueChanged(int value);
private:
Ui::Widget *ui;
......
......@@ -24,6 +24,9 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="RenderArea" name="renderArea" native="true"/>
</item>
<item row="1" column="0">
<widget class="QSlider" name="verticalSlider_origin">
<property name="orientation">
......@@ -34,9 +37,6 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="RenderArea" name="renderArea" native="true"/>
</item>
<item row="0" column="2" rowspan="2">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
......@@ -90,6 +90,25 @@
</item>
</layout>
</item>
<item row="2" column="1">
<widget class="QSlider" name="horizontalSlider_scale">
<property name="pageStep">
<number>10</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBothSides</enum>
</property>
<property name="tickInterval">
<number>0</number>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册