Устройство покраски вернуло двигатель == 0, тип: 1

Я видел много ответов на один и тот же Вопрос, я уже прошел их, но ни один из них не решил мою проблему, я получаю ошибку

QWidget :: paintEngine: больше не должен вызываться
QPainter :: begin: устройство рисования возвратило двигатель == 0, тип: 1
QPainter :: end: Painter не активен, прерван

Мне нужно знать, что такое тип: 1, и почему эта ошибка отображается,

Мой код

iconwidget.h

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.h

class GroupWidget: public QWidget
{
Q_OBJECT
QGridLayout *groupLayout = new QGridLayout ;
QRect *rect = new QRect( 0, 0, 100, 100);
QPixmap *pimap = new QPixmap("../widgeticon/icons/ball.png");
IconWigdet *icon = new IconWigdet(rect,pimap);
public:
GroupWidget();
};

groupwidget.cpp

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();
}

и класс iconwidget будет отлично работать, если основная функция была изменена на

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,

заранее спасибо

0

Решение

Ты звонишь IconWigdet::paintEvent непосредственно. Это не разрешено Вместо того, чтобы звонить прямо, звоните QWidget::update или же QWidget::repaint.

GroupWidget::GroupWidget()
{
groupLayout->addWidget(icon, 0, 1, 1, 1, 0);
this->setLayout(groupLayout);
icon->show();
// QPaintEvent *e;
// icon->paintEvent(e); this is not allowed
icon->update(); // do this instead
}

Хотя я не понимаю, зачем тебе там звонить. Просто звоню Icon->show(); должно быть достаточно. Qt автоматически запланирует событие рисования.

2

Другие решения

Попробуйте это вместо вашего конструктора

GroupWidget::GroupWidget()
{
groupLayout->addWidget(icon, 0, 1, 1, 1, 0);
this->setLayout(groupLayout);
setMinimumSize(100,100);
setMaximumSize(200,200);
icon->show();
}

Это будет работать,

0

По вопросам рекламы [email protected]