Problem mit ZOOM

Alles rund um die Programmierung mit Qt
Antworten
McNik
Beiträge: 12
Registriert: 12. Juli 2006 20:14

Problem mit ZOOM

Beitrag von McNik »

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) :

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;
    }
}
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:

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??
Antworten