• 5104阅读
  • 7回复

[提问]paintEvent能不能获得鼠标是否按下? [复制链接]

上一主题 下一主题
离线qfmeal
 

只看楼主 倒序阅读 楼主  发表于: 2015-03-30
场景如下:
1.在QGraphicsView的scene中,添加了一个地图。这个地图是从服务器申请的,因此QGraphicsView大小改变时,会重新向服务器申请一个图片
2.如果我用鼠标拖动窗口,QGraphicsView会不停的调用paintEvent,频繁向服务器申请地图,结果不是服务端报错,就是QT挂了  ……
3.所以我想在paintEvent中增加判断,鼠标移动时,不获取图片。


我看了头文件,QPaintEvent中没有类似QMouseEvent中的modifiers()方法。请问我该怎么做?谢谢

离线chinagll

只看该作者 1楼 发表于: 2015-03-31
重载resizeEvent(),在这里设置改变窗口大小时不获取图片怎样?
离线qfmeal

只看该作者 2楼 发表于: 2015-03-31
回 chinagll 的帖子
chinagll:重载resizeEvent(),在这里设置改变窗口大小时不获取图片怎样? (2015-03-31 00:19) 

试了resizeEvent,跟paintEvent差不多,控件大小改变时,也是频繁的调用。
离线pxiao_xiao

只看该作者 3楼 发表于: 2015-03-31
拖动窗体是什么意思?
如果鼠标落在窗口内  可以通过三种mouseEvent做甄别
如果是指 拖动整个窗口 在桌面上移动或发生形态改变  无能为力
离线qfmeal

只看该作者 4楼 发表于: 2015-03-31
回 pxiao_xiao 的帖子
pxiao_xiao:拖动窗体是什么意思?
如果鼠标落在窗口内  可以通过三种mouseEvent做甄别
如果是指 拖动整个窗口 在桌面上移动或发生形态改变  无能为力 (2015-03-31 10:01)

是指拖动整个窗口 在桌面上移动或发生形态改变
离线qfmeal

只看该作者 5楼 发表于: 2015-03-31
简单说,在QLabel里放一个图片,QLabel放在布局里,因此它会随着窗体大小改变而改变。
QLabel的每一次大小改变,会影响上面图片,可能会放大,就不好看了,因此会贴一张大小适合的图片。图片向服务器申请。

所以考虑在resizeEvent或者paintEvent中调用重新贴合适图片的代码。这个实现了。
--------------------

现在出现的问题是,如果用鼠标拖动窗体,改变其大小时,paintevent函数会随着鼠标拖动调用很多次,导致贴图很多次,这样导致程序报错,有时候QT报libpng的错,有时内存溢出,有时服务器溢出  ……
离线pxiao_xiao

只看该作者 6楼 发表于: 2015-03-31
地图不应该分级吗? 拖个窗口就放大地图了?
离线qfmeal

只看该作者 7楼 发表于: 2015-04-01
分级应该指的是内容的多少吧 ……。

我换了别的方式实现。不在paintEvent中重新获取大图片。第一次获取时,就直接弄一个比屏幕大的图片放上来,不让他重绘。
快速回复
限100 字节
 
上一个 下一个