メインウィンドウから、ペイントしようとしているラベルを持つダイアログを起動しています。
したがって、ダイアログのヘッダー ファイル (.h) には 2 つのクラスがあります。1 つはダイアログ自体用で、もう 1 つはラベル用です。したがって、私のラベルのクラスは次のとおりです。
class MyImage : public QLabel
{
Q_OBJECT
public:
explicit MyImage(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *e);
};
.cpp には、QDialog のコンストラクターと共に、MyImage クラスのコンストラクターと paintEvent 関数があります。
MyImage::MyImage(QWidget *parent)
: QLabel(parent)
{
/*...*/
}
void MyImage::paintEvent(QPaintEvent *e)
{
QLabel::paintEvent(e);
QPainter painter(image_label);
painter.setPen(QPen(QBrush(QColor(0,0,0,180)),1,Qt::DashLine));
painter.setBrush(QBrush(QColor(255,255,255,120)));
painter.drawRect(selectionRect);
}
これimage_label
は MyImage オブジェクトです。QDialog のコンストラクターで、QDialog のレイアウトに追加するために次のことを行います。
mainLayout->addWidget(image_label);
しかし、それはヌルです。出力 ( ) にエラー メッセージが表示されcannot add null widget
、ピックスマップをプログラムに追加しようとするとimage_label
クラッシュします。
ご回答ありがとうございます。