Seite 1 von 1

Punkt zeichnen mit MouseEvent

Verfasst: 8. November 2008 18:16
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.

Verfasst: 8. November 2008 20:04
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.

Verfasst: 8. November 2008 20:34
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);
}

Verfasst: 10. November 2008 17:39
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 );
}