尝试在 QLabel 上绘画失败(无法在没有对象的情况下调用成员函数"虚拟无效 QLabel::p aintEvent(QPaintEvent*)")
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完全相同的事情,这是创建类,它将从QLabel继承并实现paintEvent函数。例:
//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);
}
但首先,为什么要调用此方法?
相关文章:
- 如何使用新运算符跟踪在循环中创建的 QLabel
- 除了构造函数之外,还创建 QLabel
- 在 QLabel 中显示视频
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 如何在C++中将自定义文本设置为 QLabel?
- 如何使用鼠标单击选择多个 QLabel 对象?
- 在特定时间内更改 QLabel 的背景颜色
- 如何将QLabel放入切换按钮Qt c ++中
- 如何在QListWidget中显示QStringList的每个项目QLabel和另一个QString?
- 类继承自QLabel,为什么不调用自定义插槽?
- 使用 QpushButton 切换显示在 QLabel 中的图像
- QLabel 未正确更新
- Qt多线程:如何更新两个QLabel?
- 如何在Qt中为任何QLabel设置可访问的名称,我们可以使用Windows讲述人读取
- QT-如何在我的笔记本电脑上全屏显示Qlabel
- 麻烦编译可单击的Qlabel
- 将一个 Qlabel 的 QPixmap 复制到另一个 Qlabel
- 在使用 resizeEvent 调整窗口大小时调整 Qlabel 图像的大小
- Qt 4.8.6 中的 qlabel mailto 链接
- 尝试在 QLabel 上绘画失败(无法在没有对象的情况下调用成员函数"虚拟无效 QLabel::p aintEvent(QPaintEvent*)")