2017-02-03 64 views
0

我正在使用PyQt5。我正在製作一個機器人在迷宮中移動的程序。爲此,我使用QGraphicsScene。我添加了像QRect這樣的對象來表示機器人。背景是通過SetBackgroundBrush設置和PNG圖像加載(黑色代表unpassable地形): this is how it looksQT5 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) 

回答

2

有沒有drawPixel,但QPainter的有drawPoint或drawPoints(這將是在這種情況下很多更有效,我認爲)。您需要創建一個包含您的點列表的自定義圖形項目,並遍歷QPointF值列表並繪製它們。向列表添加點時,請務必重新計算邊界矩形。舉例來說,如果你有一個RobotPathItem(來自衍生的QGraphicsItem),你的paint方法可能看起來像:

RobotPathItem::paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    QPen pen; 
    // ... set up your pen color, etc., here 
    painter->setPen (pen); 
    painter->drawPoints (points, points.count()); 
} 

這是假設的「點」是QPointF的的QList或QVector。

+0

它有點作品,但並不完全: 我需要更新路徑,所以我嘗試了兩種方法: 1)每一步,刪除舊路徑並繪製新路徑。這不起作用,併產生「無法刪除0項」的錯誤,舊的路徑不會被刪除。場景開始包含越來越多的對象,他們「聚集」。 2)我創建一個項目,將指針指向它,然後通過構建新路徑並將其放到那裏來更改該指針包含的內容。這只是不會導致重繪,路徑與開始時繪製的路徑保持不變。 – user2980475

+0

經過進一步檢查,事實證明我的QGraphicItem的刪除自己。我不知道什麼是錯的。在這裏,我制定了新的問題(這一點很明確):http://stackoverflow.com/questions/42040974/custom-qgraphicsitem-deletes-itself – user2980475