2012-07-29 71 views
2

我基本上想要在對話框窗口小部件上顯示一個矩形。使用另一個問題作爲參考,我嘗試調整使用QLabel和繪畫的框架(整個過程看起來過於複雜)。爲什麼我不想在我的Qt窗口小部件上畫出「矩形」?

我開始在對話框中的類製作員:

QLabel* label; 

在對話框的構造函數:

label = new QLabel(this); 
label->setGeometry(20, 50, 50, 100); 

只是爲了試圖使它的工作,我給了對話框中的一個按鈕,使用標籤創建的「矩形」出現在小部件上。我連接這個按鈕的「按下」信號到一個槽,其執行以下操作:

QPixmap pixmap(50, 100); 
pixmap.fill(QColor("transparent")); 
QPainter painter(&pixmap); 
painter.setBrush(QBrush(Qt::black)); 
painter.drawRect(20, 50, 50, 100); 
label->setPixmap(pixmap); 
update(); 

不幸的是,當我按下按鈕沒有出現在窗口小部件。我在這裏錯過了什麼?

回答

1

我試過用PyQt,它一般工作,但我不是100%確定的程序。也許你應該在致電setPixmap()之前嘗試致電painter.end()畫家。此外,我不確定是否應該在QWidget:paintEvent之外繪製QPixmap,但繪製QImage並從中創建QPixmap可能更安全。

from PyQt4 import QtGui 

app = QtGui.QApplication([]) 

class Test(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.bn = QtGui.QPushButton("Paint") 
     self.lb = QtGui.QLabel() 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.bn) 
     layout.addWidget(self.lb) 
     self.bn.clicked.connect(self.handleClick) 

    def handleClick(self): 
     pixmap = QtGui.QPixmap(50, 100) 
     pixmap.fill(QtGui.QColor("transparent")) 
     p = QtGui.QPainter(pixmap) 
     p.drawRect(0,0,50-1,100-1) 
     p.end()  
     self.lb.setPixmap(pixmap) 

t = Test() 
t.show() 
app.exec_() 

對於簡單地繪製一個矩形,這當然是非常複雜的。我不知道你在計劃什麼,要知道有繪製數字的QGraphicsView。

相關問題