我想在我的主窗体上绘制一个图形,所以我想我会使用QLabel和Override。像这样:
// drawlabel.h
class DrawLabel : public QLabel
{
Q_OBJECT
public:
DrawLabel(QWidget *parent = 0);
private:
void paintEvent(QPaintEvent *);
};
// drawlabel.cpp
DrawLabel::DrawLabel(QWidget *parent)
: QLabel(parent)
{
}
void DrawLabel::paintEvent(QPaintEvent *)
{
qDebug() << "paint event" ;
QPainter painter(this);
painter.setPen(QPen(QBrush(QColor(0,0,0,180)),1,Qt::DashLine));
painter.setBrush(QBrush(QColor(255,255,255,120)));
QRect selectionRect(10, 10, 100, 101);
painter.drawRect(selectionRect);
}
在我的主窗口上,我放置一个QLabel,将其大小调整为大约500x200并将其提升为DrawLLabel。运行应用程序时,表单上会绘制一个虚线方框。
到目前为止一切都很好。
如果我添加该行: 这 - &GT;的setText( “123456”);
进入DrawLabel构造函数,或将其添加到paintEvent()中我看不到文本。我也希望能够在DrawLabel周围设置边框,但
this->setFrameShape(QFrame::Box);
构造函数中的也不起作用。
我应该怎么做才能让这些工作?
答案 0 :(得分:1)
好吧,我认为你应该调用基类的paintEvent
。将参数名称e
添加到方法:
void DrawLabel::paintEvent(QPaintEvent *e)
然后在方法结束时添加
QLabel::paintEvent (e);
第二个选项直接在paintEvent
上自行绘画。
答案 1 :(得分:1)
如果您想要自定义内容,请实现继承QWidget
的自定义窗口小部件。然后你可以画任何你想要的东西,并拥有你想要的任何成员。
您的问题是您已覆盖标签的绘图事件,因此不会执行绘制标签文本的代码。
您可以像Evgeny建议的那样从QLabel
调用该方法,但最好实现自定义小部件。
从基类中调用方法可能例如损坏任何以前的绘图,除非该方法是在考虑调用表格派生类的情况下实现的。我不希望库存小部件就是这种情况。我没有尝试过特别是QLabel
重新实现,但是我已经尝试过使用其他库存小部件而且它没有按预期工作。