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

新功能:实现QPainter基本绘图Demo部件即函数命名

上级 ee36f95c
......@@ -33,18 +33,14 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
#程序版本
VERSION = 1.0.0.0
#程序图标
#RC_ICONS = app.ico
#公司名称
QMAKE_TARGET_COMPANY ="company"
#程序说明
QMAKE_TARGET_DESCRIPTION = "test app"
#版权信息
QMAKE_TARGET_COPYRIGHT = "Copyright(C) 2017"
#程序名称
QMAKE_TARGET_PRODUCT = "app"
#程序语言
#0x0800代表和系统当前语言一致
RC_LANG = 0x0800
contains(QT_ARCH, i386){ # 使用32位编译器
DESTDIR = $$PWD/../bin # 程序输出路径
}else{
DESTDIR = $$PWD/../bin64 # 使用64位编译器
}
# msvc 编译器使用utf-8编码(好像只在msvc2017以后才有效
msvc {
QMAKE_CFLAGS += /utf-8
QMAKE_CXXFLAGS += /utf-8
}
......@@ -4,6 +4,7 @@
#include <QFile>
#include <QPainter>
#include <QTextDocument>
#include <QWheelEvent>
RenderArea::RenderArea(QWidget *parent) : QWidget(parent)
{
......@@ -16,3 +17,19 @@ void RenderArea::paintEvent(QPaintEvent *event)
{
}
/**
* @brief 鼠标滚轮缩放事件
* @param event
*/
void RenderArea::wheelEvent(QWheelEvent *event)
{
if(event->angleDelta().y() > 0) // 放大
{
}
else // 缩小
{
}
QWidget::wheelEvent(event);
}
......@@ -2,10 +2,28 @@
#define RENDERAREA_H
#include <QWidget>
#include <QStyle>
class RenderArea : public QWidget
{
Q_OBJECT
public:
// 绘制形状
enum Shape {
Line,
Points,
Polyline,
Polygon,
Rect,
RoundedRect,
Ellipse,
Arc,
Chord,
Pie,
Path,
Text,
Pixmap
};
Q_ENUM(Shape) // 该宏向元对象系统注册一个枚举类型,便于通过QMetaEnum获取枚举信息
public:
explicit RenderArea(QWidget *parent = nullptr);
......@@ -15,6 +33,7 @@ public slots:
protected:
void paintEvent(QPaintEvent *event) override;
void wheelEvent(QWheelEvent *event) override;
QByteArray m_html;
};
......
#include "widget.h"
#include "ui_widget.h"
#include "renderarea.h"
#include <QDebug>
#include <QMetaEnum>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
init();
}
Widget::~Widget()
......@@ -15,6 +20,87 @@ Widget::~Widget()
void Widget::init()
{
// 获取画图形状Shape枚举名称和值,写入下拉框
QMetaEnum metaEnum = QMetaEnum::fromType<RenderArea::Shape>();
for(int i=0; i < metaEnum.keyCount(); ++i)
{
ui->com_shape->addItem(metaEnum.key(i), metaEnum.value(i));
}
// 画笔样式枚举
metaEnum = QMetaEnum::fromType<Qt::PenStyle>();
for(int i=0; i < metaEnum.keyCount(); ++i)
{
ui->com_penStyle->addItem(metaEnum.key(i), metaEnum.value(i));
}
// 画笔笔帽样式枚举
metaEnum = QMetaEnum::fromType<Qt::PenCapStyle>();
for(int i=0; i < metaEnum.keyCount(); ++i)
{
ui->com_penCapStyle->addItem(metaEnum.key(i), metaEnum.value(i));
}
// 线段转角处连接样式枚举
metaEnum = QMetaEnum::fromType<Qt::PenJoinStyle>();
for(int i=0; i < metaEnum.keyCount(); ++i)
{
ui->com_penJoinStyle->addItem(metaEnum.key(i), metaEnum.value(i));
}
// 笔刷样式枚举
metaEnum = QMetaEnum::fromType<Qt::BrushStyle>();
for(int i=0; i < metaEnum.keyCount(); ++i)
{
ui->com_brushStyle->addItem(metaEnum.key(i), metaEnum.value(i));
}
ui->widget->installEventFilter(this);
}
/**
* @brief 事件过滤器
* @param watched
* @param event
* @return
*/
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->widget && event->type() == QEvent::Resize)
{
ui->horizontalSlider_origin->setMaximum(ui->widget->width());
ui->verticalSlider_origin->setMaximum(ui->widget->height());
ui->horizontalSlider_origin->setValue(0);
ui->verticalSlider_origin->setValue(ui->widget->height());
}
return QWidget::eventFilter(watched, event);
}
/**
* @brief 水平偏移原点
* @param value
*/
void Widget::on_horizontalSlider_origin_valueChanged(int value)
{
qDebug() << value;
}
/**
* @brief 垂直偏移原点
* @param value
*/
void Widget::on_verticalSlider_origin_valueChanged(int value)
{
qDebug() << ui->widget->height() - value;
}
/**
* @brief 旋转
* @param value
*/
void Widget::on_horizontalSlider_rotate_valueChanged(int value)
{
qDebug() << value;
}
void Widget::on_checkBox_clicked(bool checked)
{
qDebug() << checked;
}
......@@ -18,6 +18,19 @@ public:
private:
void init();
protected:
bool eventFilter(QObject *watched, QEvent *event) override;
private slots:
void on_horizontalSlider_origin_valueChanged(int value);
void on_verticalSlider_origin_valueChanged(int value);
void on_horizontalSlider_rotate_valueChanged(int value);
void on_checkBox_clicked(bool checked);
private:
Ui::Widget *ui;
};
......
......@@ -6,18 +6,15 @@
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
<width>946</width>
<height>699</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="RenderArea" name="widget" native="true"/>
</item>
<item row="0" column="1">
<item row="0" column="2" rowspan="2">
<widget class="QDockWidget" name="dockWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
......@@ -27,7 +24,7 @@
</property>
<property name="maximumSize">
<size>
<width>250</width>
<width>270</width>
<height>524287</height>
</size>
</property>
......@@ -35,75 +32,60 @@
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0" colspan="2">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>形状:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<item row="2" column="1">
<widget class="QComboBox" name="com_penCapStyle">
<property name="toolTip">
<string>线条收头样式</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="com_shape"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>画笔样式:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<item row="3" column="1">
<widget class="QComboBox" name="com_penJoinStyle">
<property name="toolTip">
<string>线条连接样式</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBox_2"/>
<item row="0" column="1">
<widget class="QComboBox" name="com_shape"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>笔帽样式:</string>
<string>线条连接样式:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBox_3"/>
<item row="4" column="1">
<widget class="QComboBox" name="com_brushStyle"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<item row="5" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>笔连接样式</string>
<string>画笔粗细</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBox_4"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>笔刷样式:</string>
<item row="6" column="1">
<widget class="QSlider" name="horizontalSlider_rotate">
<property name="maximum">
<number>360</number>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="comboBox_5"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_3">
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>画笔粗细</string>
<string>画笔样式</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
......@@ -118,76 +100,58 @@
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_8">
<widget class="QLabel" name="label_10">
<property name="text">
<string>原点水平偏移</string>
<string>旋转</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSlider" name="horizontalSlider_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_9">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>原点垂直偏移</string>
<string>形状</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QSlider" name="horizontalSlider_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_7">
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>缩放</string>
<string>笔刷样式</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QSlider" name="horizontalSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<item row="1" column="1">
<widget class="QComboBox" name="com_penStyle"/>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_10">
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>旋转</string>
<string>笔帽样式</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QSlider" name="horizontalSlider_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<item row="7" column="1">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>抗锯齿</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="1">
<item row="3" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
......@@ -200,17 +164,48 @@
</property>
</spacer>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>抗锯齿</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="1">
<widget class="RenderArea" name="widget" native="true"/>
</item>
<item row="0" column="1">
<widget class="QSlider" name="horizontalSlider_origin">
<property name="toolTip">
<string>原点水平偏移</string>
</property>
<property name="maximum">
<number>700</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSlider" name="verticalSlider_origin">
<property name="toolTip">
<string>原点垂直偏移</string>
</property>
<property name="maximum">
<number>653</number>
</property>
<property name="value">
<number>653</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册