gpt4 book ai didi

c++ - 尝试在 QLabel 上绘画失败(无法在没有对象的情况下调用成员函数 'virtual void QLabel::paintEvent(QPaintEvent*)')

转载 作者:行者123 更新时间:2023-11-30 03:00:30 28 4
gpt4 key购买 nike

我看过很多关于如何使用 paintevent 的示例,但我就是无法让它工作。

我的 .ui 文件中有一个名为“图像”的标签,我正试图在其中绘画。我失败得很惨。在我见过的大多数示例中,他们都使用了

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:如果我使用 QDialog::paintEvent(e); 而不是 ui->image->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);
}

但首先,您为什么要调用此方法?

关于c++ - 尝试在 QLabel 上绘画失败(无法在没有对象的情况下调用成员函数 'virtual void QLabel::paintEvent(QPaintEvent*)'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973691/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com