我正在启动一个带有标签的对话框,我正在尝试绘画。
因此,对话框的头文件(.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
程序时崩溃。
提前感谢您的任何答案!
答案 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
为空。