Farbe Gerät zurückgegeben engine == 0, Typ: 1
Ich habe gesehen, viele Antworten auf die gleiche Frage habe ich auch schon durchgemacht, aber keine davon mein problem gelöst, ich bin immer der Fehler
QWidget::paintEngine: Sollte nicht mehr aufgerufen werden
QPainter::begin: Farbe Gerät zurückgegeben engine == 0, Typ: 1
QPainter::Ende: Maler nicht aktiv, abgebrochen
Muss ich wissen, Was ist der Typ : 1, und warum dieser Fehler zeigt,
Mein code ist
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();
}
und die iconwidget Klasse funktioniert perfekt, wenn die main-Funktion geändert, um
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();
}
das bedeutet, dass, Wenn wir iconwidget class-Objekt in der main-Funktion, es funktioniert, aber es funktioniert nicht, wenn wir das gleiche tun in groupwidget Klasse,
Vielen Dank im Voraus
- Bitte keine änderungen vornehmen, erlischt die Antworten, die Sie erhalten. Ich habe ein Rollback für Sie, so dass die akzeptierte Antwort macht wieder Sinn.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sie aufrufen
IconWigdet::paintEvent
direkt. Dies ist nicht erlaubt. Statt es direkt, callQWidget::update
oderQWidget::repaint
.Obwohl ich nicht sehen, warum würden Sie dort etwas. Einfach anrufen
Icon->show();
sollte genug sein. Qt wird automatisch planen ein paint-Ereignis aus.groupwidget.h
. Ist dies deine aktuelle header-Datei?QRect *iconarea
undQPixmap *icon
. Es gibt keinen Grund, diese als Zeiger. Nur Zeiger verwenden, wenn Sie einen guten Grund, so zu tun, nicht nur setzen Sie Sie überall. Dasselbe gilt für IhreIconWidget
Konstruktor, könnte passierenconst
Referenzen:IconWigdet(const QRect &rectangle, const QPixmap &tempicon);
IconWigdet
? Setzen Sie einfachsetMinimumSize(100,100);
im Konstruktor.setMinimumSize(100,100);
in groupwidget (in diesem Fall groupwidget Objekt genannt ist in der main-Funktion, um zu zeigen,) , während es ist nicht nötig in der main - FunktionIconWidget
zu einem layout, die Kontrolle über die widget-geometrie.setGeometry
tut nichts für widgets in einem layout. In Ihrem Fall scheint es, dass Sie ging nach unten, um die Größe0,0
. Aber das layout wird immer noch zu respektieren, das widget ist die minimale und maximale Größe. Wenn Sie erstellt IhreIconWidget
immain
Funktion, es war nicht in einem layout, sosetGeometry
gearbeitet.Versuchen Sie, diese anstelle der Konstruktor
Dies funktionieren wird,