找回密码
 立即注册
收起左侧
楼主: yafeilinux

第17篇 2D绘图(七)涂鸦板

52
回复
49264
查看
[复制链接]
累计签到:2 天
连续签到:1 天
2014-4-16 16:28:05 显示全部楼层
为什么总是从窗口原点连接到鼠标按下的第一点, 以后的点都是鼠标离开的点连接到鼠标按下的点
回复 支持 反对

使用道具 举报

累计签到:1569 天
连续签到:1 天
2014-4-20 22:40:17 显示全部楼层
lyzyung 发表于 2014-4-16 16:28
为什么总是从窗口原点连接到鼠标按下的第一点, 以后的点都是鼠标离开的点连接到鼠标按下的点 ...

嗯。其实这个程序是有问题的。可以参考下 下载 页面的涂鸦板程序。
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-2 19:42:47 显示全部楼层
本帖最后由 iamcaowei 于 2014-5-2 19:45 编辑
yafeilinux 发表于 2013-8-19 22:56
你可能不理解为什么不直接判断是否是左键按下,那是因为:

Qt:\:MouseButtons QMouseEvent::buttons () co ...

buttons()不能用来判断鼠标移动吧?只能判断是否有鼠标键被按下。

event->buttons()&Qt:: LeftButton表达式在功能上与event->buttons()==Qt:: LeftButton相仿。
但是当同时有多个鼠标键被按下时,&运算发挥作用。







回复 支持 反对

使用道具 举报

累计签到:1569 天
连续签到:1 天
2014-5-13 14:06:35 显示全部楼层
iamcaowei 发表于 2014-5-2 19:42
buttons()不能用来判断鼠标移动吧?只能判断是否有鼠标键被按下。

event->buttons()&Qt:: LeftButton表达 ...

可以通过代码测试实际效果来判断。
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-6-2 13:13:47 显示全部楼层
直接把代码写过去,void Dialog::paintEvent(QPaintEvent *)这个函数报错

...\dialog.cpp:18: error: variable 'QPainter pp' has initializer but incomplete type
     QPainter pp(&pix);
                ^
...\dialog.cpp:22: error: variable 'QPainter painter' has initializer but incomplete type
     QPainter painter(this);
                     ^

这是什么意思啊?
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-6-2 13:18:27 显示全部楼层
卿可津 发表于 2014-6-2 13:13
直接把代码写过去,void Dialog::paintEvent(QPaintEvent *)这个函数报错

...\dialog.cpp:18: error: vari ...

恩好了, 是忘记加头文件<QPainter>了。。

但是又有个问题,执行后只能松开鼠标时划线,而不是连续画的。。。
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2014-6-2 13:20:46 显示全部楼层
卿可津 发表于 2014-6-2 13:18
恩好了, 是忘记加头文件了。。

但是又有个问题,执行后只能松开鼠标时划线,而不是连续画的。。。 ...

解决了!

在void Dialog::mouseMoveEvent(QMouseEvent *event)这个实现中:
我把if(event->button() & Qt:eftButton)里的event->button去掉了, 变成if(Qt:eftButton)就好了

求解,这是为什么?
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2014-7-13 14:49:05 显示全部楼层
noway 发表于 2013-7-24 20:48
我测试过了
应该就是版本问题 ,我的QT 版本是
Qt Creator 2.7.0

我也出现这个问题了,测了好久,发现当鼠标左键按下,即mousePressEvent函数结束以后,就会导致重绘(painEvent),
此时起点坐标已改变,但是终点坐标还是上一个线条的终点, 于是在painEvent函数中绘制出了一条从新起点到上一次终点的直线
我的版本是5.3
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2014-7-13 15:16:32 显示全部楼层
noway 发表于 2013-7-24 16:31
void Dialog::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt:eftButton) //鼠标左 ...

发现了,妈蛋的,罪魁祸首就是那个添加了的按钮,不加按钮就是好的,加了以后mousePressEvent结束就会出发重绘
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2014-7-13 15:22:14 显示全部楼层
楼主求助啊, 你的放大按钮是代码添加的,貌似没问题.
但是如果是在ui布局里面直接拖拽出来的,那么当鼠标按下的时候就会出发paintEvent事件,然后终点坐标还没赋值,它就已经执行paintEvent画了一条多余的线出来了,怎么办?
回复 支持 反对

使用道具 举报

累计签到:1569 天
连续签到:1 天
2014-7-14 08:14:36 显示全部楼层
memoryleak 发表于 2014-7-13 15:22
楼主求助啊, 你的放大按钮是代码添加的,貌似没问题.
但是如果是在ui布局里面直接拖拽出来的,那么当鼠标按下 ...

在构造函数中使用手动关联试试,例如connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(zoomIn()));
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2014-7-14 09:10:09 显示全部楼层
yafeilinux 发表于 2014-7-14 08:14
在构造函数中使用手动关联试试,例如connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(zoomIn())) ...

不行的, 只要拖了个按钮上去,不添加信号槽,左键按下就会触发重绘, 如果拖一个Time Edit ,点击左键居然还会像Timer一样间隔性地重绘数次
回复 支持 反对

使用道具 举报

尚未签到

2014-8-9 20:44:55 显示全部楼层
为什么要定义一个pix = QPixmap(200, 200);  不定义这个变量,直接在窗口上划画不出来,只显示鼠标按下的那一段,不显示之前绘制的

点评

这个教程中存在一些问题,在下载页面有个涂鸦板程序,可以下载下来测试。你问的问题自己应该可以搞明白。  发表于 2014-8-10 10:05
回复 支持 反对

使用道具 举报

累计签到:1569 天
连续签到:1 天
2014-8-10 10:04:10 显示全部楼层
memoryleak 发表于 2014-7-14 09:10
不行的, 只要拖了个按钮上去,不添加信号槽,左键按下就会触发重绘, 如果拖一个Time Edit ,点击左键居然还 ...

在下载页面有个涂鸦板程序,可以下载下来测试。
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2015-3-12 09:16:28 显示全部楼层
先下下来学习学习~
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-4-30 16:58:05 显示全部楼层
楼主您好,我试验过您提供的下载程序了,你的程序还是存在不能解决那个一直从上一个结束点连线到下一个点开始绘画的问题,而且开始的时候一直都是从原点连线到第一个被选择的点,但是这个问题都是在添加zoom功能之后才开始出现的。请楼主在思考一下如何解决这个问题好吗,谢谢
回复 支持 反对

使用道具 举报

累计签到:9 天
连续签到:1 天
2015-6-10 10:45:29 显示全部楼层
我按照上面您说的写的程序,运行后只能画直线和折线,不能弯曲,轨迹也不和鼠标重合,我的是win7+QT4.8.1+QTCreator2.4.1
回复 支持 反对

使用道具 举报

累计签到:1569 天
连续签到:1 天
2015-6-10 23:18:05 显示全部楼层
coolesthandsome 发表于 2015-4-30 16:58
楼主您好,我试验过您提供的下载程序了,你的程序还是存在不能解决那个一直从上一个结束点连线到下一个点开 ...

测试了,下载页面的涂鸦板程序没有问题啊。
回复 支持 反对

使用道具 举报

累计签到:1569 天
连续签到:1 天
2015-6-10 23:19:31 显示全部楼层
aabbzdd 发表于 2015-6-10 10:45
我按照上面您说的写的程序,运行后只能画直线和折线,不能弯曲,轨迹也不和鼠标重合,我的是win7+QT4.8.1+Q ...

win 7 + Qt 4.8.5 + Qt Creator 3.1.1没有问题。可能是版本上一些细节处理有问题。
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-9-7 11:16:16 显示全部楼层
有一个判断是if(event->buttons()&Qt:eftButton),这表示鼠标点击后移动,我想问一下为什么括号中只有一个&,不是应该有两个&&吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了