这是篇翻译的文章,翻译的过程中自己也亲自敲下代码,更深入地了解QPainter的功能。
我们不论是用Qt画图或者是显示文字都得用到QPainter。
QPainter
首先用QPainter来画一条直线
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtCore import Qt
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.label = QtWidgets.QLabel()
canvas = QtGui.QPixmap(400, 300)
self.label.setPixmap(canvas)
self.setCentralWidget(self.label)
self.draw_something()
def draw_something(self):
painter = QtGui.QPainter(self.label.pixmap())
painter.drawLine(10, 10, 300, 200)
painter.end()
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
真正执行画的操作是在do_something这个方法里,创建个QPainter的实例,然后传入画布也就是QPixmap,然后执行一个画的命令,最后用.end()来结束画的操作。
QPainter Primitives
QPainter提供了很多画的方法,幸运的是这些方法都是覆载过得,所以调用的时候仅有很小的差别。
例如有五种drawLine的方法,
Method | Description |
---|---|
drawLine(const QLineF &line) | Draw a QLineF instance |
drawLine(const QLine &line) | Draw a QLine instance |
drawLine(int x1, int y1, int x2, int y2) | Draw a line between x1, y2 and x2, y2 |
drawLine(const QPoint &p1, const QPoint &p2) | Draw a line between QPoint 1 and QPoint 2 |
drawLine(const QPointF &p1, const QPointF &p2) | Draw a line between QPointF 1 and QPointF 2 |