Punkt zeichnen mit MouseEvent

Alles rund um die Programmierung mit Qt
Antworten
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

Punkt zeichnen mit MouseEvent

Beitrag von konvex »

Hallo,

ich beschäftige mich noch nicht lange mit Qt, hab aber nun rausgefunden wie ich pkte und ähnliches in einer Graphicsscene zeichne.

Nun will ich das wenn man in das fenster klickt ein pkt gemalt wird...
Ich habe mir viele beispiele angeguckt und das auch bei trolltech etc nachgelesen, aber ich komm trotzdem nich drauf :roll: .

Ich hoffe mir kann jemand bei diesem wahrscheinlich "simplen" problem helfen.
ab2cd4
Beiträge: 9
Registriert: 17. Oktober 2008 19:30

Beitrag von ab2cd4 »

Frag während des MouseEvents mit QCursor::pos() die aktuelle Position ab und zeichne den Punkt.
Alternativ kannst du aber auch einen Slot erstellen und diesen per connect(this, SIGNAL(clicked()), this, SLOT(drawMouseClick())) verbinden und dann die Mausposition wie oben beschrieben auslesen und dort einen Punkt hinzeichnen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

@ab2cd4: Themaverfehlung...

Hier ein (ungetestes) Beispiel:

QGraphicsScene::mousePressEvent überladen:

Code: Alles auswählen

MyScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
  QPointF pos=mouseEvent->buttonDownScenePos(mouseEvent->buttons());
  addEllipse (pos.x()-2, pos.y()-2, 4, 4);
}
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

Beitrag von konvex »

Also ich hab das mit dem QMouseEvent probiert, jedoch nicht hinbekommen.
Ich hab es nun anders probiert, aber ich finde einfach nicht heraus wie er auf die maus reagiert. Es kommt nur die leere Scene.
Ich stelle das Programm ma hier rein und hoffe jemand kann mir sagen was fehlt bzw. ob alles falsch ist ;-) ...

Code: Alles auswählen

class graphicView : public QGraphicsView
{ 
          Q_OBJECT
  
public:
	graphicView(QGraphicsScene* s);
	~graphicView(){}  

	void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget );
	QRectF boundingRect() const; 
 
private:        
        QGraphicsScene* scene;
	QPoint *position;
	int posx;
	int posy;
	
protected:
	void mousePressEvent( QMouseEvent* e ); 	
}; 


Code: Alles auswählen

#include "graphicview.h"

graphicView::graphicView(QGraphicsScene* s)
:QGraphicsView(s), scene(s)
{      
}

  
void graphicView::mousePressEvent( QMouseEvent* e )
{

if ( e->button() == Qt::LeftButton )
{
QPoint position = e->pos();
posx = position.x();
posy = position.y();
repaint(posx,posy, 100, 100);
}
QGraphicsView::mousePressEvent(e);

}
 

void graphicView::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget )
{
QPen pen(Qt::black, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
painter->setPen(pen);
painter->setRenderHint( QPainter::Antialiasing, true );

painter->drawPoint(posx,posy);
}


QRectF graphicView::boundingRect() const
{
   return QRectF( 0, 0, 100, 100 );
} 
Antworten