我正在使用PyQt5。我正在製作一個機器人在迷宮中移動的程序。爲此,我使用QGraphicsScene。我添加了像QRect這樣的對象來表示機器人。背景是通過SetBackgroundBrush設置和PNG圖像加載(黑色代表unpassable地形): QT5 QgraphicsScene:如何在像素上逐像素地繪製
def update_background(self):
qim = QImage(self.model.map.shape[1],self.model.map.shape[0], QImage.Format_RGB32)
for x in range(0, self.model.map.shape[1]):
for y in range(0, self.model.map.shape[0]):
qim.setPixel(x ,y, qRgb(self.model.map[y,x],self.model.map[y,x],self.model.map[y,x]))
pix = QPixmap(qim)
self.scene.setBackgroundBrush(QBrush(pix))
我想現在做的是可視化尋路算法的工作(我用A *現在)。就像一條紅線將機器人與目的地連接起來,越過障礙物。該行存儲爲(X,Y)座標列表。我想遍歷列表並在場景中逐像素地繪製像素。但是我不知道該怎麼做 - 沒有「drawPixel」方法。當然,我可以添加一百個1x1大小的小矩形。但是如果路線改變,我將不得不重新繪製它們。
我想過創建一個帶有路徑的圖像並將其放置在FOREground中,然後添加。但是我不能做出透明的前景。這不是背景問題(因爲它在後面)。我認爲使用 他們的功能: http://doc.qt.io/qt-5/qpixmap.html#setAlphaChannel
但它已被棄用。它指的是QPainter。我不知道QPainter是什麼,我不確定我是否正朝着正確的方向前進。
請指教!
所以,問題是什麼是正確和有效的方式來繪製機器人建立的路線?
RobotPathItem(QGraphicsItem):
def __init__(self, path):
super().__init__()
qpath = []
for xy in path:
qpath.append(QPoint(xy[0],xy[1]))
self.path = QPolygon(qpath)
if path:
print(path[0])
def paint(self, painter, option, qwidget = None):
painter.drawPoints(self.path)
def boundingRect(self):
return QRectF(0,0,520,520)
它有點作品,但並不完全: 我需要更新路徑,所以我嘗試了兩種方法: 1)每一步,刪除舊路徑並繪製新路徑。這不起作用,併產生「無法刪除0項」的錯誤,舊的路徑不會被刪除。場景開始包含越來越多的對象,他們「聚集」。 2)我創建一個項目,將指針指向它,然後通過構建新路徑並將其放到那裏來更改該指針包含的內容。這只是不會導致重繪,路徑與開始時繪製的路徑保持不變。 – user2980475
經過進一步檢查,事實證明我的QGraphicItem的刪除自己。我不知道什麼是錯的。在這裏,我制定了新的問題(這一點很明確):http://stackoverflow.com/questions/42040974/custom-qgraphicsitem-deletes-itself – user2980475