ich habe ein kleines Programm ausgearbeitet, dass auch genau das tut, was ich möchte. Allerdings bekomme ich immer folgende Meldung generiert:
QPainter::begin: A paint device can only be painted by one painter at a time.
Ganz kurze Erklärung, mittels Datenbankabfragen, hole ich mir alle Daten, die gezeichnet werden sollen und übergebe diese meinem "DrawWidget". Je nachdem, wie viele Spalten in der Tabelle mit Messwerten enthalten sind, lege ich dementsprechend viele Tabs in einem TabWidget an. Auf jeden einzelnen dieser Tabs setze ich dann eines meiner "DrawWidgets"
Hier die hoffentlich relevanten Codeabschnitte, die helfen sollten, die Meldung nachvollziehen zu können:
Code: Alles auswählen
for(int k=0; k<Messwerte.size(); ++k)
{
TabsOfTypeDrawWidget.append(new DrawWidget(Messwerte[k]));
}Code: Alles auswählen
for(int i=0; i<TabsOfTypeDrawWidget.size(); i++)
{
ui->TW_DrawDiagram->addTab(TabsOfTypeDrawWidget[i], "Test");
TabsOfTypeDrawWidget[i]->setFixedSize(ui->TW_DrawDiagram->width(), ui->TW_DrawDiagram->height());
}Code: Alles auswählen
#include "drawwidget.h"
#include "ui_drawwidget.h"
DrawWidget::DrawWidget(QVector<int> Messwerte, QWidget *parent) :
QWidget(parent),
ui(new Ui::DrawWidget),
MesswerteKopie(Messwerte)
{
ui->setupUi(this);
setAutoFillBackground(true);
setBackgroundRole(QPalette::BrightText);
}
DrawWidget::~DrawWidget()
{
delete ui;
}
void DrawWidget::paintEvent(QPaintEvent* Event)
{
QPainter Painter(this);
Painter.begin(this);
Painter.setPen(QPen(Qt::black, 2));
Painter.drawLine(10, 10, 10, this->height()-40);
Painter.drawLine(10, this->height()-40, this->width()-10, this->height()-40);
for(int i=10, j=0; i<this->width()-10, j<MesswerteKopie.size(); i+=20, j++)
{
if(MesswerteKopie[j] < 30)
Painter.setPen(QPen(Qt::green, 2));
else
Painter.setPen(QPen(Qt::red, 2));
Painter.drawPoint(i, this->height()-40-MesswerteKopie[j]);
}
Painter.end();
}Die Daten darin sind erstmal nur exemplarisch. Die einzelnen Werte werden aber richtig gezeichnet. Dennoch immer wieder diese Meldung, die in der Anzahl der Tabs ausgegeben wird.
Was ich nicht verstehe, der Painter wird ja innerhalb von DrawWidget::painEvent(QPaintEvent*) geöffnet und auch wieder geschlossen, deswegen hat die Meldung für mich keinen Sinn.
Besteht sonst die Möglichkeit unter Windows und Mac OS etwas in der Art hinzubekommen, wie Qt::WA_PaintOutsidePaintEvent ?
Oder würdet Ihr mir generell vielleicht zu etwas anderem raten, als QPainter zur Ausgabe einer simplen Diagramms?
Ich freue mich über jede Hilfestellung. Schönen, sonnigen Pfingsttag,
Marcus