新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt代码秀
>
Qt5实现类似cad画图功能
发帖
回复
返回列表
新帖
13355
阅读
5
回复
Qt5实现类似cad画图功能
[复制链接]
上一主题
下一主题
离线
ingenious
UID:166053
注册时间
2015-09-24
最后登录
2017-06-15
在线时间
6小时
发帖
15
搜Ta的帖子
精华
0
金钱
178
威望
26
贡献值
1
好评度
16
访问TA的空间
加好友
用道具
新手上路
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2015-11-07
— 本帖被 XChinux 执行加亮操作(2016-04-23) —
MyWidget.cpp
(2 K) 下载次数:58
MyWidget.h
(1 K) 下载次数:52
T08Draw.pro
(1 K) 下载次数:44
包含三个文件Draw.pro MyWidget .h MyWidget.cpp
Draw.pro:
QT
+=
core
widgets
gui
HEADERS
+=
\
MyWidget.h
SOURCES
+=
\
MyWidget.cpp
MyWidget .h :
#ifndef
MYWIDGET_H
#define
MYWIDGET_H
#include
<QWidget>
typedef
struct
MyLine
{
QPoint
startPnt
;
QPoint
endPnt
;}
myLine
;
class
MyWidget
:
public
QWidget
{
Q_OBJECT
public
:
explicit
MyWidget
(
QWidget
*parent
=
0
);
void
paintEvent
(
QPaintEvent
*);
void
mouseMoveEvent
(
QMouseEvent
*);
void
mousePressEvent
(
QMouseEvent
*);
void
mouseReleaseEvent
(
QMouseEvent
*);
signals
:
public
slots
:
public
:
//QVector<
QVector<QPoint>
>
lines;
QPoint
startPnt
;
QPoint
endPnt
;
QVector
<
myLine
*>
lines
;
bool
isPressed
;
};
#endif
//
MYWIDGET_H
MyWidget.cpp
#include
"MyWidget.h"
#include
<QPainter>
#include
<QPixmap>
#include
<QMouseEvent>
#include
<QDebug>
MyWidget
::MyWidget(
QWidget
*parent)
:
QWidget
(parent){
}
void
MyWidget
::
paintEvent
(
QPaintEvent
*)
//执行过程painting-pressed-moved-painting-released
{
QPainter
painter(
this
);
if
(
startPnt
!=
endPnt
)
painter.drawLine(
startPnt
,
endPnt
);
for
(
int
i
=
0
;i<
lines
.size();i++)
{
//重绘时需要画出所有线
myLine
*
pLine
=
lines
;
painter.drawLine(pLine->
startPnt
,pLine->
endPnt
);
}}
void
MyWidget
::
mouseMoveEvent
(
QMouseEvent
*ev){
if
(
isPressed
==
false
)
//鼠标移动,但是鼠标是松开的
{
endPnt
=
ev->pos();
update();
qDebug
()<<ev->pos();
}
else
{
setMouseTracking(
false
);
}}
void
MyWidget
::
mousePressEvent
(
QMouseEvent
*ev){
isPressed
=
true
;
if
(hasMouseTracking())
{
myLine
*
line
=
new
myLine
;
line->
startPnt
=
startPnt
;
line->
endPnt
=
endPnt
;
this
->
lines
.push_back(line);
setMouseTracking(
false
);
}
else
{
startPnt
=
endPnt
=
ev->pos();
setMouseTracking(
true
);
//默认情况下mouse
tracking是false的,由于左键被按下之后,被设为了true,所以在上面要被设为false
update();
}}
void
MyWidget
::
mouseReleaseEvent
(
QMouseEvent
*ev){
isPressed
=
false
;
update();
qDebug
()<<
lines
.size();}
#include
<QApplication>
int
main
(
int
argc,
char
**
argv){
QApplication
app(argc,
argv);
MyWidget
w;
w.show();
return
app.exec();}
上面的代码,实现了鼠标点击两点画直线,但我想对上面实现改进:
如何才能实现画多条折线,每画完一条折线后,用滚轮键结束命令,总之一句话就是类似于cad画直线的操作,最好也要像cad一样,弹出一个LineEdit,在里面输入点的位置画直线。希望各路大神,积极发表意见,感激不尽,这样每个人都能学到知识!
本帖提到的人:
@XChinux
@zzs0829
@1123078843
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
z609932088
UID:165399
注册时间
2015-08-31
最后登录
2023-02-07
在线时间
83小时
发帖
207
搜Ta的帖子
精华
0
金钱
3121
威望
250
贡献值
0
好评度
240
访问TA的空间
加好友
用道具
侠客
加关注
发消息
只看该作者
1楼
发表于: 2015-11-12
帮你顶,希望楼主分享更多的优秀代码
我的想法就是申请一个list 这里面放着你的点的坐标,这样才能实现重回
还有一种方法就是自己新建一个widget
将你鼠标的上一个点和现在当前点击的点传入这个widet 需要做坐标转换
完了再讲这个widget显示到这个途中
共
条评分
有阳光的地方就是青春
回复
举报
离线
一去丶二三里
UID:144838
注册时间
2013-07-23
最后登录
2023-07-26
在线时间
1492小时
发帖
325
搜Ta的帖子
精华
6
金钱
3717
威望
374
贡献值
18
好评度
366
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
2楼
发表于: 2015-11-12
建议你看看QGraphicsView
共
条评分
博客地址:https://waleon.blog.csdn.net
微信公众号:高效程序员
QQ 群:242790253
微信群:加微信(iwaleon),邀请入群。
承接各种 C++/Qt/QML 项目,专业的团队,一流的服务,不二的选择!
回复
举报
离线
yyzq
UID:155340
注册时间
2014-08-28
最后登录
2020-08-18
在线时间
142小时
发帖
37
搜Ta的帖子
精华
0
金钱
400
威望
48
贡献值
1
好评度
38
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
3楼
发表于: 2015-11-12
http://www.qcad.org/en/
和
https://github.com/LibreCAD/LibreCAD
都是开源的,可以拿去参考
共
条评分
回复
举报
离线
tylan
UID:163485
注册时间
2015-06-24
最后登录
2017-08-11
在线时间
50小时
发帖
66
搜Ta的帖子
精华
0
金钱
1030
威望
84
贡献值
0
好评度
74
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
4楼
发表于: 2015-11-13
画图的话,使用qt的视图场景模型会比你用widget有优势,画折线,可以根据鼠标事件,当鼠标按下的时候画出一个点,然后当鼠标移动的时候画出直线,并不断改变直线的角度和长度,当松开的时候记录直线结束的点作为下一条直线的起点。
共
条评分
回复
举报
离线
dplusplus
UID:164673
注册时间
2015-08-04
最后登录
2016-03-25
在线时间
12小时
发帖
1
搜Ta的帖子
精华
0
金钱
10
威望
11
贡献值
0
好评度
1
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
5楼
发表于: 2015-11-13
现在我也写这个;用的类似状态机,对每个draw item type定义和维护一个State,针对mouse Press/Move/Release切换state.
共
条评分
QQ: 1262-3572-97 @SUZHOU
回复
举报
发帖
回复
返回列表
http://www.qtcn.org/bbs
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限100 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
发 布
隐藏
快速跳转
站务及资讯
网站公告
新闻资讯
Qt官方发布
网站管理
Qt应用及资源
Qt 作品展
Qt代码秀
Qt应用版
Qt技术讨论区
Qt安装与发布
Qt中文处理
Qt基础编程
Qt QML开发
Qt嵌入式开发
Qt移动平台开发
其它技术开发讨论区
Qt图书专区
《C++ GUI Qt 4编程》(第2版)专栏
《Qt高级编程》专栏
《零基础学Qt4编程》专栏
《Qt设计模式》(第2版) 图书专栏
Python Qt GUI快速编程
Qt项目开发区
天池项目
Qt开放平台开发库
机械CAD
扇贝词典
非活跃项目区
社区中心
帖子回收站(Trash)
招聘、求职、供求、广告等
休闲娱乐
关闭
关闭
选中
1
篇
全选