nun habe ich aber 2 probleme.
1) trotz flag bewegt sich das item nicht. woran liegt das?
2) ich empfange keine mouse-(move)-events, das klappt lediglich beim graphicview, aber ich brauche die position der mouse im view oder der scene...
dann wollte ich noch gerne wissen, wie ich es am besten hinkriege folgende bewegungsfunktion zu implementieren, zum einen kriege ich ja leider keine mouse-events rein, sodass nicht gezeichnet wird^^ und zum andern besteht die frage, ob das bei jedem event upgedatet wird?!
Code: Alles auswählen
BFItem::BFItem(Model *mod, double *zoom_verhaeltnis) {
setFlags(QGraphicsItem::ItemIsMovable);
dModel = mod;
...
Code: Alles auswählen
void BFItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
Q_UNUSED(widget);
// Painter mit Zoll-Koordinatensystem
painter->setRenderHint(QPainter::Antialiasing);
painter->setRenderHint(QPainter::SmoothPixmapTransform);
//! Painter automatisch so skalieren, dass man mit den "Zoll"werten malt.
painter->scale(*pixels_per_inch, *pixels_per_inch);
// Painter mit standard Pixel-Koordinatensystem
QPainter *px_painter = new QPainter;
px_painter->setRenderHint(QPainter::Antialiasing);
px_painter->setRenderHint(QPainter::SmoothPixmapTransform);
QPen pen;
selected = dModel->selected();
moving = dModel->moving();
turning = dModel->turning();
/*!
Modelle zeichnen
*/
drawRangeCircles(*painter, *px_painter, pen);
/*!
Eiheiten zeichnen
*/
drawModel(*painter, pen, dModel->position() );
/*!
Modelle selektieren
*/
drawSelCircles(*painter, *px_painter, pen);
/*!
Reichweite anzeigen
*/
drawRangeCircles(*painter, *px_painter, pen);
/*!
Modelle drehen
*/
drawAngelGrid(*painter, *px_painter);
/*!
Bewegungsimplementation...
*/
std::cout<<"X,Y = "<<mousePos.x()<<"; "<<mousePos.y()<<std::endl;
if(moving) {
std::cout<<"MOVING"<<std::endl;
QPointF vector = dModel->position() - mousePos/(*pixels_per_inch);
double dist = sqrt ( pow(vector.x(), 2.0) + pow(vector.y(), 2.0) );
if(dist <= dModel->owner()->movement() ) {
drawModel(*painter, pen, mousePos/(*pixels_per_inch) );
painter->drawLine(dModel->position(), mousePos/(*pixels_per_inch));
}
}
}