QT4 + Hintergrundbild + Zeichnen
-
Hi!
Also ich habe erst heute Morgen angefangen mich in QT ein zu arbeiten (bin doch recht begeistert) allerdings weiß ich nicht was sich alles über den Designer verwirklichen lässt und was gecodet werden muss.
Zu meinem Ziel: ich möchte eine Oberfläche (window) haben auf der ein Bild (800 x 800)sichtbar ist. Im nächsten Schritt möchte ich an bestimmten Stellen des Bildes Punkte (rote Kreise zum Beispiel) setzen (anhand von Koordinaten).
Nach dem Drücken des Buttons "Clear" soll wieder das Bild ohne die eingezeichneten Punkte dargestellt werden.Ich habe "Das QT Handbuch" von Helmut Herold, und natürlich die QT Hilfe. Dort ist es jedoch recht schwer ein entsprechendes Kapitel (es scheitert schon beim einbinden des Bitmaps) zu finden ^^
Habt ihr für mich eventuell ein Beispiel oder einen Buchvorschlag wo ich Informationen dazu finden könnte? Würde mri die Infos natürlich selber anhand der Quellcodedateien zusammensuchen aber unter den QT Examples befindet sich nichts vergleichbares, dafür ist mein Problem einfach zu speziell.Für ein paar Ansätze, Vorschläge oder Beispiele bin ich Euch dankbar.
Gruß Timmey
-
Du solltest zuerst das Tutorial durcharbeiten. http://doc.trolltech.com/4.2/tutorial-t1.html
Danach ist alles viel leichter.
Hier mal ein Beispiel für Qt 4.x. Einfach in eine Datei in ein Verzeichnis kopieren. Dann
qmake -project
qmake
makeNach dem Kompilieren startet man das Programm mit einer Bilddatei als Parameter
./prog <bild.jpg>
Mit der linken Maustaste setzt man halb transparente rote Kreise. Mit der rechten Maustaste löscht man die Kreise rückwärts.
#include <vector> #include <QWidget> #include <QApplication> #include <QImage> #include <QPixmap> #include <QPoint> #include <QPainter> #include <QMouseEvent> class CircleWidget : public QWidget { public: CircleWidget(char const * filename) : pixmap(filename) {} void paintEvent(QPaintEvent *) { QPainter painter(this); painter.drawPixmap(0, 0, pixmap); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QColor(255,0,0,100)); painter.setBrush(QBrush(QColor(255,0,0,100), Qt::SolidPattern)); for (std::size_t i = 0; i != points.size(); ++i) { painter.drawEllipse(points[i].x()-15, points[i].y()-15, 30, 30); } } void mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { points.push_back(event->pos()); update(); } else if (event->button() == Qt::RightButton) { if (points.size()) points.pop_back(); update(); } } private: QPixmap pixmap; std::vector<QPoint> points; }; int main(int argc, char ** argv) { QApplication app(argc, argv); if (argc < 2) return -1; CircleWidget widget(argv[1]); widget.show(); app.exec(); return 0; }