• 4747阅读
  • 4回复

打开对话框以后,原来窗体上的连线自动消失了,怎么办 [复制链接]

上一主题 下一主题
离线无境
 
只看楼主 正序阅读 楼主  发表于: 2008-05-17
— 本帖被 XChinux 执行加亮操作(2008-05-17) —
打开对话框以后,原来窗体上的连线自动消失了,怎么办?可能涉及到了重画事件,可是应该怎么设置呢,使得打开对话框对原有的图象没有影响,?
qt的资料太不健全了,每走一步都比较困难啊
离线无境
只看该作者 4楼 发表于: 2008-05-17
paintEvent() - 只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它并且不在paintEvent()之外在屏幕上绘制是明智的。
这句话这么拗口,原来说的就是这个意思,
原来我就是范了他们所说的不明智的错误了!
哎!
小菜鸟又走弯路了,辛苦啊!
离线无境
只看该作者 3楼 发表于: 2008-05-17
我想的不知道对不对,菜鸟一思考,老鸟就怪笑!我可不管了...
重画的问题,在于自动产生了paintevent 事件,paintevent事件有好多原因产生,就update也会产生paintevent,我的画图程序,不在 paintevent事件内,因此只要paintevent产生,我画的图就被更新,窗体部件就会被自动重画,也就是被自动清空,所以调出一个对画框来,或进行窗体切换,应该是都激发了paintevent事件,原来画的内容就这样被意外的更新掉了,
因此问题解决的思路有两个
  1\将画图程序干脆写在paintevent事件内,这样就会同步更新
    这样做的毛病显而易见,因为paintevent太容易被诱惑了,那就会老在重画,这也许就出现闪屏的原因,因为update做了处理,允许积累一定量的update以后在去进入paintevent,所以他妈的要提倡update,而repaint是立竿见影的去更新,所以对一些动画制作来说比较好,而至于QT::WRepaintNoErase,这只是部分的减少了闪屏效果,估计也是让他较少的进入paintevent里边,
  2\那就是限制paintevent的产生,最好是由自己控制,
离线无境
只看该作者 2楼 发表于: 2008-05-17
布尔参数陷阱

布尔参数常常导致难以阅读的代码.特别地,增加某个bool参数到现存的函数一般都会是个错误的决定.在Qt中,传统的例子是repaint(),它带有一个可选的布尔参数,来指定背景是否删除(默认是删除).这就导致了代码会像这样子:

widget->repaint(false);
初学者可能会按字面义理解为,"不要重绘!"

自然的想法是bool参数节省了一个函数,因此减少了代码的臃肿.事实上,这增加了代码的臃肿,有多少Qt用户真正知道下面这三行代码在做什么呢?

widget->repaint();
    widget->repaint(true);
    widget->repaint(false);
好一点的API代码可能看起来像这样:

widget->repaint();
    widget->repaintWithoutErasing();


网上的文章中写的,我在定义禁止部件重画的时候,正是用了repaint(false),跟他所说的初学者的理解是一样的,我钻进了他的陷阱里了,可是大人文章结束再也没讲这几句是什么意思,难道我的理解偏差很大吗?
老鸟,站出来指点一下啊.....
离线无境
只看该作者 1楼 发表于: 2008-05-17
VB  delphi等有redraw属性,设置他们的属性,就可以了
可是qt中对应应的属性是什么,是不是repain方法啊,可是我尝试过了,似乎行不通啊!
最近一个月才开始接触QT,并且原来也没有MFC的使用经验,一路走来真是苦不堪言,尤其QT书面资料比较缺,使用的又是QT2的版本,相当的郁闷,效率也是相当的低,目前的编程还是在没有集成开发环境下写的,调试也是相当痛苦!
QT,是"求他"缩写啊!
兄弟们,救救我吧,我宁愿地震的时候在北川
快速回复
限100 字节
 
上一个 下一个