Qt: Mit QPainter auf die Kind-widgets
Bin ich ein Qt/C++ - problem mit einem einfachen QWidget
Programm zeichnet eine ellipse im inneren ein Kind QWidget
.
Das Programm besteht aus:
(1) Ein Elternteil QWidget
(2) Ein Kind QWidget
(als Zeichnung Oberfläche für eine ellipse)
(3) Ein Remis QPushButton
Hier ist ein Teil des Codes (QPushButton-Slot und Signal-code weggelassen, der Einfachheit halber)
void Draw::paintEvent(QPaintEvent *event) {
QPainter painter;
painter.begin(child_Widget); //The line with the problem
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
painter.drawEllipse(50, 50, 100, 100);
painter.end();}
Linie 2 painter.begin(child_Widget);
nicht tun. Das Programm zeichnet die ellipse nur, wenn ich ersetzen Sie die Zeile 2 mit painter.begin(this);
sondern bezieht sich auf die übergeordneten QWidget
und nicht auf das Kind QWidget
wie gewünscht.
P. S. ich habe die child_Widget befindet sich in einem GroupBox, welche wiederum befindet sich in einem QVBoxLayout
.
Jede Anregung?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, was ich versuchen würde, wäre die Installation eines event-filter auf das Kind-widget (siehe QObject::installeEventFilter()), dann, im übergeordneten widget, schnappt Euch die QEvent::Paint-Ereignis, und tun das Gemälde gibt.
Wo Sie das Kind-widget :
Dann in der parent :
Wie gesagt in der QPainter-Dokumentation
Wenn Sie möchten, zeichnen Sie auf das widget, das Sie tun müssen, wird also von seinen eigenen paintEvent().
Könnten Sie malen auf eine pixmap und zeichnen Sie die pixmap in der widget-paint-Ereignis. Und es kann jede Funktion oder den Schlitz, nicht notwendigerweise ein paint-Ereignis, z.B. können Sie mehrere für das zeichnen von verschiedenen Objekten. Kann man von überall auf eine pixmap, die Anforderung, dass das paint-Ereignis wird verwendet, ist nur für das widget, ziehen die pixmap. Sie können sogar zeichnen in einem anderen thread, wenn es eine komplexe Szene und nur aktualisiert, das Ergebnis aus der pixmap in den Haupt-thread.