带有标签的QDialog我正在尝试绘画

时间:2012-08-16 10:25:17

标签: qt class label

从我的主窗口

我正在启动一个带有标签的对话框,我正在尝试绘画。

因此,对话框的头文件(.h)有两个类,一个用于对话框本身,另一个用于我的标签。所以,我的标签是这样的:

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程序时崩溃。

提前感谢您的任何答案!

1 个答案:

答案 0 :(得分:0)

void MyImage::paintEvent(QPaintEvent *e)
{
    // QPainter painter(image_label); <- Only paint onto yourself.
    QPainter painter(this);
    painter.setPen(QPen(QBrush(QColor(0,0,0,180)),1,Qt::DashLine));
    painter.setBrush(QBrush(QColor(255,255,255,120)));
    painter.drawRect(selectionRect);
}

不要调用基类,因为新QPainter会覆盖任何输出。它崩溃了,因为image_label为空。