[Interest] QGraphicsView stays big (solved)

Waitman Gobble uzimac at da3m0n8t3r.com
Fri Jun 8 04:19:47 CEST 2012


Andre Haupt <andre at bitwigglers.org> wrote ..
> On Thu, Jun 07, 2012 at 06:22:56AM -0700, Waitman Gobble wrote:
> > yeah I suspect it does create a memory leak, but it does seem to solve my size
> issue with QGraphicsScene;
> > 
> > 
> > Per recommendation I've just tried this:
> > 
> > gs->clear();
> > gs->setSceneRect(QRectF());
> > gs->addPixmap(pm);
> > 
> > ..and unfortunately this does not appear to resize (shrink) the QGraphicsScene.
> > 
> > I agree it's probably better to run without a memory leak, so I'll keep trying.
> I just tried this. Setting the sceneRect to an empty QRectF() does have
> the same effect as not setting it at all (as documented). But setting the sceneRect
> to the pixmaps rect certainly works. Does something like the following
> work for you?
> 
> #include <QtGui/QApplication>
> #include <QGraphicsView>
> #include <QPixmap>
> #include <QLayout>
> #include <QPushButton>
> 
> class Widget : public QWidget
> {
>     Q_OBJECT
> public:
>     Widget() {
>         largePixmap = new QPixmap(3200, 2400);
>         largePixmap->fill(Qt::blue);
>         smallPixmap = new QPixmap(320, 240);
>         smallPixmap->fill(Qt::red);
> 
>         scene = new QGraphicsScene(this);
>         view = new QGraphicsView(scene, this);
> 
>         smallButton = new QPushButton("small pixmap", this);
>         connect(smallButton, SIGNAL(clicked()), this, SLOT(setSmall()));
> 
>         largeButton = new QPushButton("large pixmap", this);
>         connect(largeButton, SIGNAL(clicked()), this, SLOT(setLarge()));
> 
>         QVBoxLayout *layout = new QVBoxLayout(this);
>         layout->addWidget(smallButton);
>         layout->addWidget(largeButton);
>         layout->addWidget(view);
>     }
> 
> private slots:
>     void setSmall() {
>         scene->clear();
>         scene->setSceneRect(smallPixmap->rect());
>         scene->addPixmap(*smallPixmap);
>     }
> 
>     void setLarge() {
>         scene->clear();
>         scene->setSceneRect(largePixmap->rect());
>         scene->addPixmap(*largePixmap);
>     }
> 
> private:
>     QPixmap *largePixmap, *smallPixmap;
>     QGraphicsView *view;
>     QGraphicsScene *scene;
>     QPushButton *smallButton, *largeButton;
> };
> 
> int main(int argc, char *argv[])
> {
>     QApplication a(argc, argv);
> 
>     Widget w;
>     w.resize(800, 600);
>     w.show();
> 
>     return a.exec();
> }
> 
> #include "main.moc"
> 

Andre,

yeah, that's it. perfect.  Thanks so much. I appreciate the help.

            QPixmap pm(path);
            gs->clear();
            gs->addPixmap(pm);
            gs->setSceneRect(pm.rect()); //set the size using Andre's way.
            gv->setScene(gs);
            gv->update();


-- 
Waitman Gobble
San Jose California USA



More information about the Interest mailing list