Hallo nochmal,
danke für deine Hilfe, aber ich glaube, dass das mit dem paintEvent() usw noch nicht ganz verstehe. Ich poste mal den code und versuche zu erklären, was in welcher reihenfolge ausgeführt wird. Bitte sagt mir, wenn ich was falsch sage. Hier erstmal der Code:
Code: Alles auswählen
import com.trolltech.qt.core.QPoint;
import com.trolltech.qt.core.QSize;
import com.trolltech.qt.core.Qt;
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QColor;
import com.trolltech.qt.gui.QImage;
import com.trolltech.qt.gui.QMouseEvent;
import com.trolltech.qt.gui.QPaintEvent;
import com.trolltech.qt.gui.QPainter;
import com.trolltech.qt.gui.QPen;
import com.trolltech.qt.gui.QResizeEvent;
import com.trolltech.qt.gui.QWidget;
public class ZeichnenImpl extends QWidget {
Zeichnen ui = new Zeichnen();
QPainter painter;
QWidget scrollimage;
QImage image;
QPoint lastPoint;
QPoint endPoint;
public static void main(String[] args) {
QApplication.initialize(args);
ZeichnenImpl testZeichnenImpl = new ZeichnenImpl();
testZeichnenImpl.show();
QApplication.exec();
}
public ZeichnenImpl() {
ui.setupUi(this);
}
protected void paintEvent(QPaintEvent event)
{
QPainter painter = new QPainter(this);
painter.drawImage(new QPoint(0, 0), image);
}
private void drawto(QPoint endPoint) {
QPainter painter = new QPainter(image);
painter.setPen(new QPen(QColor.red, 5, Qt.PenStyle.SolidLine, Qt.PenCapStyle.RoundCap,
Qt.PenJoinStyle.RoundJoin));
painter.drawLine(lastPoint, endPoint);
update();
lastPoint = endPoint;
painter.end();
}
protected void mouseMoveEvent(QMouseEvent event)
{
drawto(event.pos());
}
protected void mouseReleaseEvent(QMouseEvent event)
{
drawto(event.pos());
}
protected void mousePressEvent(QMouseEvent event)
{
lastPoint = event.pos();
}
protected void resizeEvent(QResizeEvent event)
{
image = resizeImage(image, new QSize(200, 200));
}
public QImage resizeImage(QImage image, QSize newSize)
{
QImage newImage = new QImage(newSize, QImage.Format.Format_RGB32);
newImage.fill(new QColor(Qt.GlobalColor.white).rgb());
QPainter painter = new QPainter(newImage);
painter.drawImage(new QPoint(0, 0), image);
painter.end();
return newImage;
}
}
Meine (hoffentlich) richtige Erklärung des Codes:
Beim Fenster öffnen wird das paintEvent und das resizeEvent(?!) aufgerufen. Wenn man eine Maustaste drückt, wird lastPoint auf die aktuelle Position gesetzt. Bewegt man nun die Maus, wird die methode drawto() aufgerufen, wo nun an lastPoint etwas im image gemalt wird. Durch update() wird nun das paintEvent() aufgerufen, welches das image im Fenster zeichnet und somit die Änderung auch auf dem Bildschirm angezeigt wird.
Ist das so richtig, wie ich das nun geschrieben habe oder werfe ich was durcheinander? Bei dem resizeEvent bin ich mir nicht ganz sicher. Aber das wird doch nur aufgerufen, wenn das Fenster geöffnet wird, und wenn man die Fenstergrößte ändert.
Jetzt verstehe ich leider nicht, wie du das meinst, dass ich die ScrollArea neu zeichnen soll.
painter.drawScrollArea (oder was ähnliches) gibt es ja nicht, oder wie meintest du das?
MfG Tobi