• 7399阅读
  • 8回复

如何画线? [复制链接]

上一主题 下一主题
离线yangyunzhao
 

只看楼主 倒序阅读 楼主  发表于: 2009-08-28
我想在QWidget里面画线。有人告诉我可以重载paintEvent()。但有两个问题

1、我通过QT设计师设计的UI文件
  1. void iLCDEmulator::paintEvent(QPaintEvent *)
  2. {
  3.     QPainter paint(ui.displayWidget); //ui.displayWidget是一个QWidget  
  4.     //上面代码没有效果,不会画线。
  5.     //如果使用QPainter paint(this) ,则会在main windows那里画线
  6.     paint.setPen(Qt::red);
  7.     paint.drawLine(0,0,50,50);
  8. }


2、paintEvent方式太狭隘了吧。我并不希望在程序启动的时候画线,也不是想要在the widget was obscured and has now been uncovered的时候画线。我仅仅想在某个时候画线,由我自己控制什么时候画线,而且还需要可以自由控制线的位置。

请问有什么办法么?或者说该用别的控件??
离线duduqq

只看该作者 1楼 发表于: 2009-08-28
QPainter paint(this) ;
你可以设置一个标志位,当为真是才paint.drawLine()不就行了吗
离线dbzhang800

只看该作者 2楼 发表于: 2009-08-28
1.  你想在那个widget上画,就子类化并重载哪个控件的paintEvent()。

   从你的例子上看,你在重载 iLCDEmulator 的 paintEvent 却想在 ui.displayWidge 画东西

2. 不清楚你的狭隘是怎么得出的,painteEvent几乎是万能的,你列的要求完全没问题。
离线yangyunzhao

只看该作者 3楼 发表于: 2009-08-28
引用第2楼dbzhang800于2009-08-28 11:23发表的  :
1.  你想在那个widget上画,就子类化并重载哪个控件的paintEvent()。
   从你的例子上看,你在重载 iLCDEmulator 的 paintEvent 却想在 ui.displayWidge 画东西
2. 不清楚你的狭隘是怎么得出的,painteEvent几乎是万能的,你列的要求完全没问题。

一旦启动程序,或者最大化程序或者别的一些情况,都会调用painteEvent。这样太不爽了吧?
我仅仅希望在我需要的时候调用某个函数在指定的QWidget上面绘图,这个很难么?

如果随便动一下程序就调用一次painteEvent,未免效率奇差。
离线yangyunzhao

只看该作者 4楼 发表于: 2009-08-28
还有,我的displayWidget是通过QT设计师拖出来的。看楼上的意思,不能使用QT设计,还得自己写一个类去继承QWidget,然后实现它的paintEvent。这也太太太麻烦了吧?

如果我的界面里面有几十个不同的控件,我岂不是要写几十个类,分别实现不同的paintEvent啊!!!
离线xtfllbl

只看该作者 5楼 发表于: 2009-08-28
引用第4楼yangyunzhao于2009-08-28 11:38发表的  :
还有,我的displayWidget是通过QT设计师拖出来的。看楼上的意思,不能使用QT设计,还得自己写一个类去继承QWidget,然后实现它的paintEvent。这也太太太麻烦了吧?
如果我的界面里面有几十个不同的控件,我岂不是要写几十个类,分别实现不同的paintEvent啊!!!

如果按照你的说法,这样做是正解,没有捷径。
上海欢迎您
离线cspp

只看该作者 6楼 发表于: 2009-08-28
QT中的例子能满足你要求嘛?
离线hiti_tony
只看该作者 7楼 发表于: 2009-08-28
up2楼
离线xtfllbl

只看该作者 8楼 发表于: 2009-08-28
引用第7楼hiti_tony于2009-08-28 16:13发表的  :
up2楼

怎么回事?今天看到第二次了?现如今流行UP?请问有意义么?
上海欢迎您
快速回复
限100 字节
 
上一个 下一个