• 5765阅读
  • 4回复

[讨论]关于qpainter [复制链接]

上一主题 下一主题
离线luntangee
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-03
在qpainter中,没有设置其他属性,直接用drawText,drawLine,drawRect在widget上绘图,为什么出来的图形,当x轴超过一定范围(大约100),超出的部分就无法显示。对qpainter不熟,请指点一下
离线dbzhang800

只看该作者 1楼 发表于: 2011-05-03
你不妨给出你的完整代码,来证实你提到的问题确实存在

下面是一个完整的程序(你用C++的话,同样的代码可能会稍微长一点,但不会太长)
  1. try:
  2.     from PySide import QtCore, QtGui
  3. except ImportError:
  4.     from PyQt4 import QtCore, QtGui
  5.     
  6. class Widget(QtGui.QWidget):
  7.     def __init__(self, parent=None):
  8.         super(Widget, self).__init__(parent)
  9.         self.resize(400, 300)
  10.         
  11.     def paintEvent(self, evt):
  12.         p = QtGui.QPainter(self)
  13.         p.drawLine(0, 0, 400, 300)
  14.         
  15. if __name__ == '__main__':
  16.     import sys
  17.     app = QtGui.QApplication(sys.argv)
  18.     w = Widget()
  19.     w.show()
  20.     sys.exit(app.exec_())

离线luntangee
只看该作者 2楼 发表于: 2011-05-03
#!/usr/bin/python
# -*- coding:utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from example import *
import sys, os
class examplepainter(QtGui.QWidget):
        def __init__(self,parent=None):
           QtGui.QWidget.__init__(self,parent)
        
        def paintEvent(self,event):        
              p=QPainter(self)            
              p.drawLine(0,0,500,10)                
              p.drawRect(0,0,500,10)
class StartQt4(QtGui.QMainWindow):
    def __init__(self, parent=None):                    
       QtGui.QWidget.__init__(self, parent)
       self.ui = Ui_Form()
       self.ui.setupUi(self)
       self.example=examplepainter(self.ui.widget)
if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   myapp = StartQt4()
   myapp.show()
   sys.exit(app.exec_())
首先是在designer中新建个ui,在ui上放置一个widget,qpainter的绘图是画在widget上,运行后
出现的图形当x轴超出一定长度(约100)后,超出部分无法显示,找不到原因。
离线dbzhang800

只看该作者 3楼 发表于: 2011-05-03
添加布局 QLayout 来管理你的widget,或者手动设置你认为的合适大小(比你的约100大就行)

题外:如果你用designer的话
强烈建议你用提升法,取代你这儿的
self.example=examplepainter(self.ui.widget)
这种东西

离线luntangee
只看该作者 4楼 发表于: 2011-05-03
我手动设置的widget,宽600 ,高400,有足够的长宽。

因为用的是designer,需要把图画在指定的widget上,所以用了self.example=examplepainter(self.ui.widget)这种处理方式。会不会是因为这种处理方式才导致上述问题呢。

非常感谢你的建议,能不能详细说明一下提升法指的是什么,谢谢
快速回复
限100 字节
 
上一个 下一个