Qt下加载图片,在图片上绘制多边形,移动鼠标拉伸多边形
来源:互联网 发布:c语言调用exe文件 编辑:程序博客网 时间:2024/06/08 11:22
本实例是绘制梯形,拖动四个顶点可以拉伸图形
编译环境为 Win7–Qt5.4
1.新建Application工程项目,命名为TiXing,基类选择QWidget;
2.在widget.h的头文件中添加以下声明:
private: int j; int m_dragging; int X[4]={50,200,300,50},Y[4]={100,100,200,200};protected: void mouseReleaseEvent(QMouseEvent*event); void mousePressEvent(QMouseEvent*event); void mouseMoveEvent(QMouseEvent*event); void paintEvent(QPaintEvent *event);
3.然后再widget.cpp文件中添加头文件:
#include <QPainter>#include <QMouseEvent>#include <QWidget>#include <QPen>#include<QDebug>
继续添加函数定义:
void Widget::paintEvent(QPaintEvent *event) { QPainter paint(this); QImage image; image.load("../POLYGON/MyDrawing/luo.jpg"); qDebug() << image.size() << image.format() << image.depth(); paint.drawImage(QPoint(0, 0), image); paint.setPen(QPen(Qt::blue,5)); for(int i=0;i<4;i++) paint.drawPoint(X[i],Y[i]); paint.setPen(Qt::red); QPolygon pts; pts.setPoints(4, X[0],Y[0], X[1],Y[1], X[2],Y[2],X[3],Y[3]); paint.drawConvexPolygon(pts);}void Widget::mouseReleaseEvent(QMouseEvent *event){ m_dragging = 0;}void Widget::mousePressEvent(QMouseEvent *event){ for(int i=0;i<4;i++) { if(event->pos().x()==X[i]&&event->pos().y()==Y[i]) { m_dragging = 1; j=i; break; } else continue; }}void Widget::mouseMoveEvent(QMouseEvent *event){ if (m_dragging==1) { X[j]=event->pos().x(); Y[j]=event->pos().y(); update(); }}
4.运行结果如下:
附上文件代码:
widget.h-------------------------------------------------------#ifndef WIDGET_H#define WIDGET_H#include <QWidget>namespace Ui{class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();private: Ui::Widget *ui; // int a; // int b; int j; int m_dragging; int X[4]={50,200,300,50},Y[4]={100,100,200,200};protected: void mouseReleaseEvent(QMouseEvent*event); void mousePressEvent(QMouseEvent*event); void mouseMoveEvent(QMouseEvent*event); void paintEvent(QPaintEvent *event);};#endif // WIDGET_Hwidget.cpp-------------------------------------------------------#include "widget.h"#include "ui_widget.h"#include <QPainter>#include <QMouseEvent>#include <QWidget>#include <QPen>#include<QDebug>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); m_dragging = 0; ui->setupUi(this); resize(500,514); setWindowTitle(tr("polygon"));}Widget::~Widget(){ delete ui;}void Widget::paintEvent(QPaintEvent *event) { QPainter paint(this); QImage image; image.load("../POLYGON/MyDrawing/luo.jpg"); qDebug() << image.size() << image.format() << image.depth(); paint.drawImage(QPoint(0, 0), image); paint.setPen(QPen(Qt::blue,5)); for(int i=0;i<4;i++) paint.drawPoint(X[i],Y[i]); paint.setPen(Qt::red); QPolygon pts; pts.setPoints(4, X[0],Y[0], X[1],Y[1], X[2],Y[2],X[3],Y[3]); paint.drawConvexPolygon(pts);}void Widget::mouseReleaseEvent(QMouseEvent *event){ m_dragging = 0;}void Widget::mousePressEvent(QMouseEvent *event){ for(int i=0;i<4;i++) { if(event->pos().x()==X[i]&&event->pos().y()==Y[i]) { m_dragging = 1; j=i; break; } //else continue; }}void Widget::mouseMoveEvent(QMouseEvent *event){ if (m_dragging==1) { X[j]=event->pos().x(); Y[j]=event->pos().y(); update(); }}
0 0
- Qt下加载图片,在图片上绘制多边形,移动鼠标拉伸多边形
- 根据坐标在图片上绘制多边形边框
- 地图上绘制多边形
- 如何在DeepEarth中进行图形绘制(点、线、多边形以及自定义图片图层)
- 在Leaflet地图上绘制多边形,避免缩放时dynamicMapLayer遮住多边形
- 绘制多边形
- 绘制多边形
- 多边形绘制
- 绘制多边形
- 绘制多边形
- 绘制多边形
- Opencv用鼠标绘制填充多边形
- 谷歌地图鼠标绘制多边形方法
- Unity Shader 使用鼠标绘制自由多边形
- vtkPolygonalSurfaceContourLineInterpolator 多边形曲面上的多边形绘制器
- QT拉伸图片
- QT图片拉伸填充
- 在一个多边形的图层中心点显示一个图片
- 巴斯卡三角
- LESS使用简介
- java的war、jar、ear包的作用分别是什么?及eclipse打包war文件方法
- 《pigcms v6.2最新完美至尊版无任何限制,小猪微信源码多用户微信营销服务平台系统》
- 怎么把PPT幻灯片格式转换成为PDF
- Qt下加载图片,在图片上绘制多边形,移动鼠标拉伸多边形
- 缓存相关知识点(动态内容缓存)
- KNN算法
- 重要:Java中Excel上传
- 5个JVM命令行标志,值得你知道
- 线性时间排序
- MyEclipse 配置svn
- VS2013中使用Git建立源代码管理
- ps基础学习笔记