2012-07-29 3 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 % 확실하지 않다. 어쩌면 painter.end()에 전화하여 setPixmap()을 호출하기 전에 화가를 호출해야합니다. 또한, 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가 있음을 알고 있어야한다.

관련 문제