Qt: Problem mit QPainter
-
Hallo,
ist vermutlich eine sehr einfache Frage, aber ich hab einfach nix zu gefunden: Ich habe mir ein Qgraficsview erstellt, auf dem ich heiter mit nem QPainter herum malen möchte.
Meine plotter.cppvoid plotter::buildGui() { int breite = anzeige[0]+rahmen[0]+rahmen[2]; int hoehe = anzeige[1]+rahmen[1]+rahmen[3]; QHBoxLayout* mainLayout = new QHBoxLayout(); QWidget* mainWidget = new QWidget(); mainWidget->setLayout(mainLayout); setCentralWidget(mainWidget); mainWidget->setFixedSize(breite+300,hoehe+50); ausgabe = new QListWidget(); ausgabe->setMinimumWidth(250); mainLayout->addWidget(ausgabe); mainLayout->addStretch(1); plotfenster = new QGraphicsScene(0,0,breite,hoehe); QGraphicsView* graphicsview = new QGraphicsView(plotfenster); graphicsview->setAutoFillBackground(1); graphicsview->setMinimumSize(breite+10,hoehe); mainLayout->addWidget(graphicsview); QPainter* painter = new QPainter; painter->begin(graphicsview); painter->setPen(Qt::red); painter->setBrush(Qt::blue); painter->drawEllipse(100,100,50,50); if (painter->backgroundMode()==0) { print("Fehler"); } }
und meine plotter.h
#ifndef plotter_H #define plotter_H #include <QtGui/QMainWindow> #include <qgraphicsscene.h> #include <qlistwidget.h> #include <string> class plotter : public QMainWindow { Q_OBJECT public: plotter(QWidget *parent = 0, Qt::WFlags flags = 0); ~plotter(); void buildFileMenu(); void buildGui(); void buildPlot(); void dateiEinlesen(std::string dateiname); void print(QString); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QGraphicsScene* plotfenster; QListWidget* ausgabe; public slots: void load(); private: void plot(double x, double y); }; #endif // plotter_H
Wenn ich das Programm ausführe, baut er zwar die GUI richtig auf, zeigt mir abver immer an, dass der painnter->backgroundMode = Null ist und zeichnet entsprechend nicht. Hab schon die Hilfe nach Beispelen etc durgeforstet, aber bin nicht so recht fündig geworden. Deswegen dachte ich mir, es geht bestimmt schneller, wenn mir jemand einfach kurz sagt, was ich vergessen/falsch gemacht hab.
Gruß, Juan
-
Hab schon die Hilfe nach Beispelen etc durgeforstet, aber bin nicht so recht fündig geworden.
Heißt wohl du warst zu faul, die Suchergebnisse nach der Lösung zu filtern?
Fang einfach mal hier an
http://qt-project.org/doc/qt-4.8/graphicsview.html
und dann mach hier weiter
http://qt-project.org/doc/qt-4.8/qgraphicsitem.html
-
Ich habe zum Zeichnen einfach ein Widget erstellt und
setBackgroundRole(QPalette::Base); setAutoFillBackground(true);
im Konstruktor ausgeführt. Außerdem funktioniert das Zeichnen soweit ich weiß nur innerhalb paintEvent(QPaintEvent
(falls es diesbezüglich keine Besonderheit an QGraphicsView gibt). D.h. du musst die Daten zwischenspeichern und dann den Inhalt im Paint-Event zeichnen, z.B. indem du die update()-Funktion des Widgets aufrufst.
-
wxSkip schrieb:
falls es diesbezüglich keine Besonderheit an QGraphicsView gibt
Ja, die gibt es. Das Zeichnen wird in die Items ausgelagert. Weil aber einiges zu beachten ist und insgesamt zu viel zu erklären, hab ich ja schon die Links gepostet (die man sofort beim Zuchen nach graphicsview in der Doku präsentiert bekommt, und die ALLES erklären).