2

基本的に、ダイアログウィンドウウィジェットに長方形を表示したいと思います。別の質問を参考にして、QLabelを使用してペイントするフレームワークを適応させようとしました(プロセスは全体的に非常に複雑に見えます)。

ダイアログボックスのクラスのメンバーを作成することから始めました。

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(); 

残念ながら、ボタンを押してもウィジェットに何も表示されません。ここで何が欠けていますか?

4

1 に答える 1

1

私はこれをPyQtで試しましたが、通常は機能しますが、手順については100%確信がありません。painter.end()たぶん、呼び出す前に画家に電話してみてくださいsetPixmap()。また、の外部でQPixmapに描画することになっているのかどうかはわかりQWidget:paintEventませんが、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があることに注意してください。

于 2012-07-30T02:10:42.440 に答える