2017-01-02 154 views
2

我在我的QtGui.QGraphicsView的init中使用以下內容來製作一個很好的網格/交叉圖案。但不知道如何更改交叉圖案線條的背景顏色或厚度?使用setColor設置顏色,但這隻會改變crossPattern的顏色而不改變背景。在QtCore.Qt.CrossPattern上設置圖案顏色和線條粗細

有沒有辦法改變這些,或者我應該使用不同類型的風格?

import PySide.QtGui as QtGui 
import PySide.QtCore as QtCore 

class NodeGraphView(QtGui.QGraphicsView): 

    def __init__(self, parent): 
     super(NodeGraphView, self).__init__(parent) 

     self.fg_brush = QtGui.QBrush() 
     self.fg_brush.setStyle(QtCore.Qt.CrossPattern) 
     self.fg_brush.setColor(QtGui.QColor(42, 42, 42, 255)) 

     self.setBackgroundBrush(self.fg_brush) 

回答

2

視圖背景基本上只是爲了「填充」;十字圖案非常基本,不可配置(除了顏色,因爲這是基本的填充屬性)。但是,繪製自己的網格並不難,然後你有更多的控制(如厚度,虛線/虛線,顯示原點等):

  • 創建網格線筆:給它的顏色和寬度
  • 您可以將筆設置爲具有恆定的「美觀」寬度;在這種情況下,它不會擴展
  • 添加命令行來現場
  • 組行有最低Z值所以他們一切之前繪製

例子:

from PyQt5.QtCore import QTimer, Qt 
from PyQt5.QtGui import QPen 
from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView 

scale_fac = 1 

def scale(): 
    global scale_fac 
    scale_fac = scale_fac * 1.5 
    view.scale(scale_fac, scale_fac) 

app = QApplication([]) 

scene = QGraphicsScene() 
pen = QPen(Qt.red) 
pen.setCosmetic(True) # *** 
for x in range(0, 500, 50): 
    line = scene.addLine(x, 0, x, 500, pen) 
    line.setZValue(-10) 
for y in range(0, 500, 50): 
    scene.addLine(0, y, 500, y, pen) 
    line.setZValue(-10) 

view = QGraphicsView() 
view.setScene(scene) 
view.show() 

QTimer.singleShot(1000, scale) 
QTimer.singleShot(2000, scale) 
QTimer.singleShot(3000, scale) 
app.exec() 

如果setCosmetic(True)不會發出,線寬會隨着放大而增加。

上面的好處是線條在場景中的固定座標處。但是,如果縮小,則可能需要添加更多行,或者使現有行更長。您可以通過覆蓋場景的drawBackground()來完成此操作,該場景通過觀看場景的矩形進行調用:在那裏調整線端點。

0

嗯,發現我也可以設置背景顏色,而不會影響網格:

self.setObjectName("QGraphicsView") 
    frame_css = ''' 
    QGraphicsView#QGraphicsView { 
     background-color: rgb(42,42,42); 
    } 
    ''' 

    self.setStyleSheet(frame_css)