Problem mit ZOOM
Verfasst: 17. Januar 2007 16:08
Hallo zusammen
ich habe ein kleines Poblem und stehe ausserdem noch unter Zeitdruck (morgen Abgabe
(( und noch 2.Mio sachen zu machen)
Also:
Ich habe mit QT 3.3 ein Projekt erstellt das aus einer Tabelle MEnü.... und einem Workspace mit verschiedenen QCanvas und QCanvasView besteht.
In den QCanvas sind verschiedene Module enthalten die bewegt werden können (zBsp. QCanvasRectangle usw. ...)
Jetzt darf ich netter weise noch eine ZOOM Funktion implementieren (Wunsch vom Betreuer.......) das Zoomen war auch kein Problem. Allerdings können immer nur alle QCanvas gleichzeitig gezoomt werden (auch nicht schlimm) :
Wenn ich jetzt allerdings einen Punkt in einem QCanvas anklicken will, funktioniert das nicht mehr. Ich habe das folgendemassenversucht (werden noch ein paar andere Kleinigkeiten in der Methode gemacht:
ich habe ein kleines Poblem und stehe ausserdem noch unter Zeitdruck (morgen Abgabe
Also:
Ich habe mit QT 3.3 ein Projekt erstellt das aus einer Tabelle MEnü.... und einem Workspace mit verschiedenen QCanvas und QCanvasView besteht.
In den QCanvas sind verschiedene Module enthalten die bewegt werden können (zBsp. QCanvasRectangle usw. ...)
Jetzt darf ich netter weise noch eine ZOOM Funktion implementieren (Wunsch vom Betreuer.......) das Zoomen war auch kein Problem. Allerdings können immer nur alle QCanvas gleichzeitig gezoomt werden (auch nicht schlimm) :
Code: Alles auswählen
void CanvasGatterView::zoomIn()
{
if (isActiveWindow () )
{
QWMatrix m = this->worldMatrix();
m.scale( 1.2, 1.2 );
this->setWorldMatrix( m );
zoom = zoom +1;
}
}
void CanvasGatterView::zoomOut()
{
if (isEnabled())
{
QWMatrix m = this->worldMatrix();
m.scale((1/1.2),(1/1.2) );
this->setWorldMatrix( m );
zoom = zoom - 1;
}
}
Code: Alles auswählen
void CanvasGatterView::contentsMousePressEvent( QMouseEvent* e )
{
bool found = false;
QPoint mousePoint = e->pos();
//muss noch verbessert werden
QCanvasItemList l = canvas()->collisions(e->pos());
for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it)
{
if ( (*it)->rtti() == 1002 )
{
int xcor= ((*it)->x()) * pow(1.2 , zoom);
int ycor= (*it)->y()* pow(1.2 , zoom);
int zcor= (*it)->z()* pow(1.2 , zoom);
int gnr = findGatter( xcor, ycor, zcor);
int zoomwert = pow(1.2 , zoom);
int x = (*it)->x();
int y = (*it)->y();
// qDebug("Klick zoom %d mit x %d und altem x %d , sowie y %d und neuem y %d zoomwert",zoom ,xcor, x, ycor, y, zoomwert);
if (gnr != -1)
{
if (e->button() == Qt::RightButton)
{ if ( activeModul != gnr)
setActiveModul(gnr);
}
else
setActiveModul(gnr);
}
else
setActiveModul(gnr);
found = true;
}
}
if (!found)
setActiveModul(-1);
}
void CanvasGatterView::contentsMouseMoveEvent( QMouseEvent *e)
{ // qDebug("hier köönte gemoved werden");
if ( activeModul != -1)
{Modul[activeModul].moveModulBy(((e->pos().x())* pow(1.2 , zoom)) -Modul[activeModul].getposX(),
((e->pos().y())* pow(1.2 , zoom))-Modul[activeModul].getposY());
// qDebug("Hier wird gemoved");
}
}
Kann mir jemand helfen????????? Nur ein kleiner Denkfehler oder geht das so überhaupt nicht??