C++ 绘制设备返回的引擎==0,类型:1
我已经看到了同一个问题的许多答案,我已经看过了,但是没有一个解决了我的问题,我得到了错误 QWidget::paintEngine:不应再被调用 QPaint::begin:绘制设备返回的引擎==0,类型:1 QPaint::end:画师未激活,已中止 我需要知道,什么是类型:1,为什么会显示这个错误 我的代码是 iconwidget.hC++ 绘制设备返回的引擎==0,类型:1,c++,qt,qwidget,qpainter,qabstractbutton,C++,Qt,Qwidget,Qpainter,Qabstractbutton,我已经看到了同一个问题的许多答案,我已经看过了,但是没有一个解决了我的问题,我得到了错误 QWidget::paintEngine:不应再被调用 QPaint::begin:绘制设备返回的引擎==0,类型:1 QPaint::end:画师未激活,已中止 我需要知道,什么是类型:1,为什么会显示这个错误 我的代码是 iconwidget.h class IconWigdet : public QAbstractButton { Q_OBJECT QRect *iconarea; QPainter
class IconWigdet : public QAbstractButton
{
Q_OBJECT
QRect *iconarea;
QPainter p;
QPixmap *icon;
public:
explicit IconWigdet(QRect *rectangle,QPixmap *tempicon);
void paintEvent(QPaintEvent *);
};
iconwidget.cpp
IconWigdet::IconWigdet(QRect *rectangle,QPixmap *tempicon)
{
iconarea = new QRect();
*iconarea = *rectangle ;
icon = new QPixmap(*tempicon);
this->setGeometry(0,0,iconarea->width(),iconarea->height()+20);
}
void IconWigdet::paintEvent(QPaintEvent *)
{
qDebug() << " PaintEvent ";
p.begin(this);
p.drawText(iconarea->x()+ 10,iconarea->height()+10, "name");
p.drawPixmap ( *iconarea,*icon );
p.end();
}
GroupWidget::GroupWidget()
{
groupLayout->addWidget(icon, 0, 1, 1, 1, 0);
this->setLayout(groupLayout);
icon->show();
QPaintEvent *e;
icon->paintEvent(e);
}
groupwidget.cpp
IconWigdet::IconWigdet(QRect *rectangle,QPixmap *tempicon)
{
iconarea = new QRect();
*iconarea = *rectangle ;
icon = new QPixmap(*tempicon);
this->setGeometry(0,0,iconarea->width(),iconarea->height()+20);
}
void IconWigdet::paintEvent(QPaintEvent *)
{
qDebug() << " PaintEvent ";
p.begin(this);
p.drawText(iconarea->x()+ 10,iconarea->height()+10, "name");
p.drawPixmap ( *iconarea,*icon );
p.end();
}
GroupWidget::GroupWidget()
{
groupLayout->addWidget(icon, 0, 1, 1, 1, 0);
this->setLayout(groupLayout);
icon->show();
QPaintEvent *e;
icon->paintEvent(e);
}
main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
GroupWidget *Gw = new GroupWidget;
Gw->show();
return a.exec();
}
如果主函数改为
int main(int argc, char *argv[])
{
QApplication a(argc, argv);;
QRect *rect = new QRect( 0, 0, 100, 100);
QPixmap *pimap = new QPixmap("../widgeticon/icons/ball.png");
IconWigdet *Iw = new IconWigdet(rect,pimap);
Iw->show();
return a.exec();
}
这意味着,如果我们在主函数中使用iconwidget类对象,它可以工作,但在groupwidget类中使用同样的方法时,它就不工作了
提前感谢您直接拨打的是
IconWigdet::paintEvent
。这是不允许的。与其直接调用,不如调用或
虽然我不明白你为什么要打电话到那里。只需调用
Icon->show()代码>应该足够了。Qt将自动安排绘制事件。尝试此操作,而不是使用构造函数
GroupWidget::GroupWidget()
{
groupLayout->addWidget(icon, 0, 1, 1, 1, 0);
this->setLayout(groupLayout);
setMinimumSize(100,100);
setMaximumSize(200,200);
icon->show();
}
这将起作用,它不起作用。。当我在主功能中使用简单的图标->显示时,它工作正常(主功能在Qn中提到)。当我在groupwidget类中调用它时,它不起作用,实际上paint事件没有自动调用,或者当从groupwidget@AkhilVSuku您在groupwidget.h中做了一些奇怪的事情。这是你真正的头文件吗?@AkhilVSuku你没有删除的地方到处都有不必要的指针,所以你有一大堆内存泄漏。像QRect*iconarea
和QPixmap*图标
。没有理由把它们当作指针。只有当你有充分的理由这样做时才使用指针,不要把它们放在任何地方。你的IconWidget
构造函数也是如此,你可以传递对它的const
引用:IconWigdet(constqrect&rectangle,constqpixmap&tempicon)
@AkhilVSuku如果为IconWigdet
设置最小大小会发生什么?只需输入setMinimumSize(100100)在构造函数中的code>。@AkhilVSuku将IconWidget
添加到一个布局中,该布局将控制小部件的几何体setGeometry
对布局中的小部件不做任何操作。在您的情况下,它似乎降到了大小0,0
。但是,布局仍将遵循小部件的最小和最大大小。当您在main
函数中创建IconWidget
时,它不在布局中,因此setGeometry
起作用。请不要进行会使您收到的答案无效的更改。我已经为你做了回卷,以便被接受的答案再次有意义。