• 8434阅读
  • 8回复

qt中如何判断触发某些事件的原因 [复制链接]

上一主题 下一主题
离线sbtree
 
只看楼主 正序阅读 楼主  发表于: 2009-07-14
qt类中的某些事件的触发原因可能有多种,例如paintEvent事件,可能是调用repaint或者update函数引起,也可能是窗口被遮挡住后重新显示,或者其他原因。如何判断具体的一次重画事件是由什么原因引起的呢?
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 8楼 发表于: 2009-07-15
为什么窗口最小化之后再还原并不触发resize事件呢?
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 7楼 发表于: 2009-07-15
逼我重写resize事件,再来试一试吧
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 6楼 发表于: 2009-07-15
QWidget里面找不到窗口状态改变的信号,不然做个信号槽连接也可以阿,郁闷
[ 此帖被sbtree在2009-07-15 01:50重新编辑 ]
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 5楼 发表于: 2009-07-15
问题来了,当鼠标点击任务栏里的程序,程序接收不到鼠标事件,难道还要让我对QDesktop安装事件过滤器才能结决这个问题吗?
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 4楼 发表于: 2009-07-15
引用第3楼280923299于2009-07-14 21:48发表的  :
也许可以在类里添加一个bool,判断是否是绘制一部分。
重载update,然后把值设为true,然后paintEvent里面根据bool判断?
感觉不是最好的方法啊。

设置bool变量的方法尝试过了,不过没必要重写update函数。问题是当通过鼠标点击任务栏上的程序条使窗口最小化到任务栏之后再恢复的时候,窗口总是在鼠标按下的时候被刷新,抬起的时候没有刷新,而恢复的过程是在鼠标抬起之后发生的,这样的话如果在鼠标按下和抬起之间发生局部重画事件,也就是那个bool变量被重置了,就造成了只看到局部窗口的更新了,而我期望的是,重画整个窗口事件能在鼠标抬起的时候发生,这样就可以解决我的问题了。现在在考虑是不是要实现一下mouseReleaseEvent。觉得这样做也不是一个很好的办法,因为还要判断当前当前窗口的状态,然后决定是否更改那个bool变量,先试试再说吧,希望你们能有更好的方法。
[ 此帖被sbtree在2009-07-15 01:47重新编辑 ]
windows 7 + VC++2008 + Qt4.5.2
离线280923299
只看该作者 3楼 发表于: 2009-07-14
也许可以在类里添加一个bool,判断是否是绘制一部分。

重载update,然后把值设为true,然后paintEvent里面根据bool判断?

感觉不是最好的方法啊。
离线sbtree
只看该作者 2楼 发表于: 2009-07-14
如果能区别开多好啊,我就可以对同一事件的不同触发原因作不同的处理了。
相关的另一个问题,我想保留窗口中的现有内容,当paintEvent再次被触发的时候,在窗口中增加新的内容,目的是不想重画整个窗口,而是以增量的方式添加新的内容以,提高显示速度。qt提供的update函数可以给一个更新区域作为参数,问题是被更新区域的原始内容如何保留?如何把新内容叠加上去?在paintEvent函数里面不仅要处理画局部区域,还要考虑必要的时候画整个窗口。
windows 7 + VC++2008 + Qt4.5.2
离线shiroki

只看该作者 1楼 发表于: 2009-07-14
没有办法判断
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
快速回复
限100 字节
 
上一个 下一个