PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT Problem



Mertin
06-02-2005, 23:05
Hi!

Ich möchte gerne bei meinem dargestellten Canvas die Bildgröße anpassen lassen, wenn die größe des Programmfensters durch ziehen an der rechten unteren Ecke verändert wird. Wie ließe sich das am besten lösen?

greets,

Mertin

anda_skoa
07-02-2005, 15:05
Da die Canvas, bzw der CanvasView ja automatisch mit resized wird, brauchst du ansich nur eine eigene CanvasView Subklasse benutzen und dort resizeEvent überschreiben.

Ciao,
_

Mertin
08-02-2005, 09:02
Hi,
Nun ich bin noch recht frisch bei Qt und weiss jetzt nicht ganz wie du das meinst. Die Canvas wird automatisch mit resized? Dann müsste ich ja im prinzip nichts tun müssen? Und wie muss ich den resizedEvent überschreiben um das Bild anuzupassen? :confused:

Mertin

anda_skoa
08-02-2005, 14:49
Vielleicht hab ich nicht ganz verstanden, wo das Problem liegt.

Du hast ein QMainWindow, darin als Kindwiget einen QCanvasView und die QCanvasView Instanz wurde mit setCentralWidget als zentrales Widget des MainWindows eingetragen.

Dann sollte nämlich die Canvas automatisch mit dem Programmfenster mit verändert werden.

Ciao,
_

Mertin
09-02-2005, 13:33
Also zum Verständniss etwas Code:



Canvas::Canvas( QObject * parent,
const char * name)
: QCanvas (parent, name),
shownImage(*new ImagePtr()),
currentImage(*new ImagePtr())
{
myImage = NULL;
undoImage = NULL;
redoImage = NULL;
myPixmap = new CanvasPixmap( this, myImage, 5.0 );
myPixmap->show();
iAmVisible = false;

setEdited( FALSE );
resize(1000,1000);

myParent = parent;

mySaveImageController = new SaveImageController(mainApplicationWindow);
mainApplicationWindow->notifyQuit(this);
}





void Canvas::resizeEvent(QResizeEvent* e)
{
myImage->resize(e->size().width(), e->size().height());
// oder ....
// myImage.resize(event->size());
// .. ??

}




:confused:

anda_skoa
09-02-2005, 16:44
In QCanvas gibt es kein resizeEvent(), Eventhandler Methoden gibt es nur in QWidget Subklassen.

Du könnteste resize() neu implementieren, aber ich bin mir nicht sicher, dass der View das bei seinem Resize aufruft.
Besser vielleicht gleich resizeEvent im view und dort am eigenen Canvas resize() aufrufen.

Ciao,
_

bmann
09-02-2005, 17:04
Wenn das Fenster (etwa das QMainWindow) resized wird, werden höchstens die widgets des Fensters (also etwa QCanvasView) resized, aber nicht das QCanvas Objekt.

Um das zu erreichen könnte man etwa dieses machen, wie von anda_skoa angedeutet:


MyCanvasView::resizeEvent(QResizeEvent* e)
{
canvas()->resize(e->width(), e->height());
}


QCanvas::resize() zu überschreiben ist dagegen recht witzlos, da das ja nicht automatisch aufgerufen wird.

CU
Andi