Hallo,
ich muss diesen Thread leider nochmal aufrollen... Mit dem QRubberBand komme ich gut klar (ich habe das mit der Farbe nicht hinbekommen, aber es geht auch so).
Jetzt habe ich allerdings eine andere Aufgabenstellung. Ich müsste nun Dreiecke zeichnen. Ich würde das denke ich gerne mit QPainter machen und dann drawPolygon().
Aus der Dokumentation habe ich folgendes Beispiel:
Code:
static const QPointF points[3] = {
QPointF(10.0, 80.0),
QPointF(20.0, 10.0),
QPointF(80.0, 30.0),
};
QPainter painter(this);
painter.drawPolyline(points, 3);
Eingebaut in mein "altes Minimalprogramm" habe ich dann diesen Quellcode:
MainWindow.h:
Code:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <Qt/QMainWindow.h>
#include "Forms/Ui_MainWindow.h"
class QAction;
class QLabel;
class QMenu;
class MainWindow : public QMainWindow, protected Ui_MainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
private:
QImage GenerateQImage(int value);
QLabel *imageLabel;
};
#endif
MainWindow.cpp:
Code:
#include <Qt/QLabel.h>
#include <QtGui/QtGui>
#include "MainWindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setupUi(this);
imageLabel = new QLabel(this->centralWidget()); //platziert das Label auf dem Fenster
imageLabel->setBackgroundRole(QPalette::Base);
imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
imageLabel->setScaledContents(true);
//Startbild generieren
QImage image = GenerateQImage(255);
imageLabel->setPixmap(QPixmap::fromImage(image));
imageLabel->setVisible(true);
static const QPointF points[3] = {
QPointF(10.0, 80.0),
QPointF(20.0, 10.0),
QPointF(80.0, 30.0),
};
QPainter painter(imageLabel);
painter.drawPolyline(points, 3);
connect(action_Beenden, SIGNAL(triggered()), this, SLOT(close()));
}
QImage MainWindow::GenerateQImage(int value)
{
QImage img_gray(200, 200, QImage::Format_Indexed8);
// Colortable erstellen für Graustufen
QVector<QRgb> grayscales;
for (int i=0; i<256; ++i)
grayscales.push_back(qRgb(i,i,i));
// colortable dem graustufen bild zuweisen
img_gray.setColorTable(grayscales);
for (int z=0; z<200; ++z)
for (int x=0; x<200; ++x)
{
img_gray.setPixel(x,z, value);
}
return img_gray;
}
Irgendwas stimmt natürlich nicht allerdings habe ich nur Anleitungen mit paintEvent gefunden (die ich auch nicht wirklich verstanden habe). Kann mir jemand helfen
Die Fehlermeldung, die angezeigt wird lautet übrigens: QPainter::begin: Paint device returned engine == 0, type: 1
Lesezeichen