#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "renderarea.h"
#include "qgridlayout.h"
#include "qrect.h"
#include "beziercruve.h"
#include "qvector.h"
#include "qdebug.h"
#include "qevent.h"
#include "qdesktopwidget.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
mouseDotCnt(0)
{
QGridLayout *mainLayout = new QGridLayout(this);//把renderarea画图区域加入gridlayout
pMyRenderArea = new RenderArea(this);
//pMyRenderArea->setFixedSize(800,600);//固定大小
pMyBezierCruve = new BezierCruve(this);
mainLayout->addWidget(pMyRenderArea);
QRect deskRect = get_desktop_geometry();
qDebug("desktop info, w:%d, h:%d", deskRect.width(), deskRect.height());
this->setFixedSize(deskRect.width(), deskRect.height());
pMyRenderArea->setFixedSize(deskRect.width(), deskRect.height());
ui->setupUi(this);
ui->pushButton->setGeometry(deskRect.width()/7*6, deskRect.height()/16,
deskRect.width()/7-10, deskRect.height()/16);
connect(pMyBezierCruve, SIGNAL(signal_send_points(QVector<MY_POINT>)), pMyRenderArea, SLOT(getDotData(QVector<MY_POINT>)));
connect(this, SIGNAL(signal_mouse_lbtn_pos(QPoint)), pMyRenderArea, SLOT(get_lbtn_pos(QPoint)));
connect(this, SIGNAL(signal_mouse_lbtn_pos(QPoint)), this, SLOT(slot_draw_bezier(QPoint)));
connect(this, SIGNAL(signal_set_desktop_geometry(QRect)), pMyRenderArea, SLOT(get_desktop_geometry(QRect)));
connect(this, SIGNAL(signal_clear_all_lines()), pMyRenderArea, SLOT(clear_all_lines()));
}
MainWindow::~MainWindow()
{
delete ui;
}
QRect MainWindow::get_desktop_geometry()
{
QDesktopWidget *dwsktopwidget = QApplication::desktop();
QRect deskrect = dwsktopwidget->availableGeometry();
return deskrect;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if(event->button() ==Qt::LeftButton){
qDebug("鼠标 左 键按下");
QPoint lbtnPpos = event->pos();
qDebug("left button posX: %d, pos Y:%d", lbtnPpos.x(), lbtnPpos.y());
mouseDotCnt++;
if(mouseDotCnt>DEF_MAX_DOTS_QTY_OF_BEZIER_CRUVE){
mouseDotCnt = 0;
}
testPoint[mouseDotCnt-1].x = lbtnPpos.x();
testPoint[mouseDotCnt-1].y = lbtnPpos.y();
emit signal_mouse_lbtn_pos(lbtnPpos);
qDebug("mouseDotCnt: %d", mouseDotCnt);
}else if(event->button()==Qt::RightButton){
qDebug("鼠标 右 键按下");
}else if(event->button()==Qt::MidButton){
qDebug("鼠标 中 键按下");
}
}
//bug here
void MainWindow::slot_draw_bezier(QPoint)
{
if(mouseDotCnt>2){//鼠标捕获3点才开始画线
MY_POINT* tmpTestPoint = new MY_POINT[mouseDotCnt];//新分配n个点的测试点给贝塞尔曲线
memcpy(tmpTestPoint, testPoint, sizeof(MY_POINT)*mouseDotCnt);
pMyBezierCruve->bezier_set_dot_qty(mouseDotCnt-1);//一定要实际点数减1
pMyBezierCruve->bezier_draw_cruve(tmpTestPoint);
emit pMyBezierCruve->signal_send_points(pMyBezierCruve->cruveDots);//当画图完毕,pMyBezierCruve->cruveDots已经产生了
delete []tmpTestPoint;
}
}
void MainWindow::on_pushButton_clicked()
{
mouseDotCnt = 0;
pMyBezierCruve->cruveDots.clear();
emit signal_clear_all_lines();
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于qt5.8写的一个贝塞尔曲线 qt5.8工程源码 直接打开编译,不是网上转的,是自己写的,里面有注释 贝塞尔曲线的t系数是0.5 C++写贝塞尔曲线,可以在任意平台编译,可移植的贝塞尔曲线 贝塞尔曲线例子 Bezier demo bezier curve writen by qt5.8 qt5.8 project of bezier, you can open the pro file and compile the project directly it is fully test and reliable. this bezier curve's t factor is 0.5f C++ coede of bezier, cross platfor
资源推荐
资源详情
资源评论
收起资源包目录
BezierCruveQt5.zip (12个子文件)
BezierCruve
renderarea.h 1KB
main.cpp 885B
mainwindow.h 931B
renderarea.cpp.fD7112 2KB
BezierCruve.pro.user 23KB
beziercruve.cpp 2KB
beziercruve.h 662B
BezierCruve.pro 1KB
commondata.h 171B
mainwindow.cpp 3KB
renderarea.cpp 2KB
mainwindow.ui 1KB
共 12 条
- 1
资源评论
- xz1992642019-12-18有用,谢谢。
- xu71032242017-11-16资源不全缺少 ui_mainwindow.hmynameislinduan2018-01-05找不到ui_mainwindow.h不是因为缺少头文件,这个是生成的文件。不是用户编写。 大部分原因是Qt4到Qt5的时候出问题,解决请参考: http://www.daimami.com/qt/445774.htm https://stackoverflow.com/questions/19711564/qt-5-migration-cannot-open-include-file-ui-mainwindow-h
mynameislinduan
- 粉丝: 127
- 资源: 57
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功