vn.py量化社区
By Traders, For Traders.
Member
加入于:
帖子: 73
声望: 0
def paint(
    self,
    painter: QtGui.QPainter,
    opt: QtWidgets.QStyleOptionGraphicsItem,
    w: QtWidgets.QWidget
):
    """
    Reimplement the paint method of parent class.
    This function is called by external QGraphicsView.
    """
    rect = opt.exposedRect   # exposedRect(暴露矩形)为什么有坐标值,我又没传坐标值给它。

    min_ix = int(rect.left())
    max_ix = int(rect.right())
    max_ix = min(max_ix, len(self._bar_picutures))

    rect_area = (min_ix, max_ix)
    if rect_area != self._rect_area or not self._item_picuture:
        self._rect_area = rect_area
        self._draw_item_picture(min_ix, max_ix)

    self._item_picuture.play(painter)  # 这行代码又又什么作用?我直接用painter绘制就行,为什么还需要picture?

为什么要重写?paint()是什么时候被调用的?画图的函数明明是_draw_item_picture(),我只要在其他地方调用就可以画图了。为什么注册掉此方法,k线图都画不错来。
在百度上查找很久都未搞明白,所以只能在论坛中问。

Administrator
avatar
加入于:
帖子: 4595
声望: 262

paint是Qt本身的回调函数,可以认为是类似CTP接口回调函数的东西,在编程上又叫做一种钩子hook。提供给需要定制组件比较底层功能的用户使用

Member
加入于:
帖子: 73
声望: 0

明白,但这两行代码不理解,百度也没找到解释。
rect = opt.exposedRect # exposedRect(暴露矩形)为什么有坐标值,我又没传坐标值给它。
self._item_picuture.play(painter) # 这行代码又又什么作用?我直接用painter绘制就行,为什么还需要picture?

Administrator
avatar
加入于:
帖子: 4595
声望: 262
  1. 坐标值是Qt本身在绘图窗口发生变化时,传入进来的
  2. 把一根根已经构造好的K线图像,快速画在图表的画布上,而不用每次K线图像都重画
Member
加入于:
帖子: 73
声望: 0

谢谢,明白了。

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号