![](/img/trans.png)
[英]cannot call member function 'virtual void ThreadBase::doTask()' without object
[英]Trying to paint on a QLabel fails (cannot call member function 'virtual void QLabel::paintEvent(QPaintEvent*)' without object)
我已经看过很多关于如何使用paintevent的例子,但我无法让它发挥作用。
我在.ui文件中有一个名为'image'的标签,我正在尝试在其中绘画。 我悲惨地失败了。 在我见过的大多数例子中,他们都使用了
QLabel::paintEvent(e)
但我不能用这个,我得到:
error: cannot call member function 'virtual void QLabel::paintEvent(QPaintEvent*)' without object
而且,当我使用时
ui->image->paintEvent(e);
我明白了
/usr/include/qt4/QtGui/qlabel.h:141: error: 'virtual void QLabel::paintEvent(QPaintEvent*)' is protected
我似乎错过了一些东西......这是我尝试实现的代码的一部分:
void crop_my_image::paintEvent(QPaintEvent *e)
{
ui->image->paintEvent(e);
QPainter painter(ui->image);
painter.setPen(QPen(QBrush(QColor(0,0,0,180)),1,Qt::DashLine));
painter.setBrush(QBrush(QColor(255,255,255,120)));
painter.drawRect(selectionRect);
}
crop_my_image
属于QDialog类型!
PS:如果,而不是ui->image->paintEvent(e);
我使用QDialog::paintEvent(e);
我可以成功地在我的对话框上画画,所以我应该走在正确的道路上!
提前感谢您的任何答案!
您必须使用QDialog对标签执行完全相同的操作,QDialog是将继承自QLabel并实现paintEvent函数的create类。 例:
//MyLabel.h
class MyLabel : public QLabel
{
Q_OBJECT
public:
MyLabel(QWidget *parent = 0);
private:
void paintEvent(QPaintEvent *);
};
//MyLabel.cpp
MyLabel::MyLabel(QWidget *parent)
: QLabel(parent)
{
/*...*/
}
void MyLabel::paintEvent(QPaintEvent *)
{
/* paint somehting on your label*/
}
而且你将能够做到:
void crop_my_image::paintEvent(QPaintEvent *e)
{
myLabelObject->paintEvent(e);
QPainter painter(ui->image);
painter.setPen(QPen(QBrush(QColor(0,0,0,180)),1,Qt::DashLine));
painter.setBrush(QBrush(QColor(255,255,255,120)));
painter.drawRect(selectionRect);
}
但首先,为什么要调用此方法的事件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.