Qt skalowanie rysunku wraz z wielkoscia okna oraz mozliwosc przemiszczania rysunku

0

Hej.

Mam klase rozszerzajaca QGraphicsView, zawierajaca klasy rozszerzajace QgraphicsScene i QGraphicsItem.

Chciałbym moc tak zrobić, by rysunek zwikszal sie i zmniejszal wraz z wielkoscia okna. Jak to zrobic ?

Ponadto fajnie jakbym mogl lewym klawiszem myszy go przesuwac, dodalem do konstuktora klasy dziedziczacej po QGraphicsItem this->setFlag(QGraphicsItem::ItemIsMovable); i dzieki temu moge go przesuwac, ale wysunek ulega rozmazaniu, dopiero ponowna zwiekszenie i zmnijeszenie okna likwiduje bledne rozmazanie (jak to zaautomatyzowac) ?

a to moja metoda paint z rysunkiem w klasie rozszerzajace QGraphicsItem:

 
void GItem::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *a)
{
        p->setRenderHint(QPainter::Antialiasing, true);
        p->setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
        p->setBrush((QBrush(Qt::green, Qt::SolidPattern)));
        p->drawEllipse(QPointF(scene_width/2,scene_height/2),scene_width,scene_height);
}


z gory dzieki za pomoc, dosyc pilne to dla mnie

0

ok, poprawne przenoszenie udalo sie zrobic:
QGraphicsView::FullViewportUpdate

a jak zrobic skalowanie wraz z rozmiarem okna ?

0

mialem tak zrobione:

 
QRectF GItem::boundingRect() const
{
	return QRectF(0,0,scene_width,scene_height);
}

ale to nie dzialalo, tak czy siak musze wewnatrz "sporo zwrocic"

0

Skalowanie możesz zrobić przedfiniowując QGraphicsView::resizeEvent() http://developer.qt.nokia.com/doc/qt-4.8/qgraphicsview.html#resizeEvent .
Np. tak (rysunek skaluje się przy zmianie jego wysokości):

 
void MyQGraphicsView::resizeEvent(QResizeEvent *event)
{
    const qreal newScale = event->size().height() / defaultHeight;
    resetTransform();
    scale(newScale, newScale);
}

defaultHeight to stała określająca domyślną wysokość rysunku przy której skala powinna wynosić 1. Możesz też zrobić niezależne skalowanie osi X i Y tylko wtedy proporcje się rozjadą.

0

no spoko, dzieki
problem w tym tylko, ze to skalowanie dziala tylko przy kliknieciu Maksymalizuj

gdy rozszerzam okno myszka to nic sie nie dzieje

0

Jeżeli to QGraphicScene trzymasz w jakimś Widgetcie, to możesz ustawić minimalną szerokość i wysokość tego widgeta jako procentową wielkość okna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1