[Interest] QGraphicsView stays big (solved)
Waitman Gobble
uzimac at da3m0n8t3r.com
Fri Jun 8 14:50:37 CEST 2012
Till Oliver Knoll <till.oliver.knoll at gmail.com> wrote ..
>
> Am 08.06.2012 um 04:19 schrieb "Waitman Gobble" <uzimac at da3m0n8t3r.com>:
>
> > ...
> > gs->addPixmap(pm);
> > gs->setSceneRect(pm.rect()); //set the size using Andre's way.
>
> Hmm, that's odd. While your code makes perfect sense from what I understand from
> the previously linked Qt docs is that it should also work with a "null" QRectF.
> And yes, I really meant "null" as in "QRectF::isNull() returns true" (the c'tor
> creates a "null" QRectF, just as was previously shown in André's code).
>
> But apparently that doesn't work and hence seems to be a bug.
>
> Imagine you would clear the scene and add /several/ new objects to it. Off course
> you could always calculate the bounding box of those objects yourself by iterating
> over them - but that is exactly the purpose of sceneRect(), if the current rectangle
> is a "null" one (at least according to the docs).
>
>
> By the way: what do you do with your single pixmap in the graphics scene? Do you
> want to be able to zoom in? Otherwise why not use a simple QPainter to draw it
> onto some given widget?
>
> Cheers,
> Oliver
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
Hi,
Maybe it's a bug? Setting to Null QRectF did not seem to update the size.
here's version/os info.
$ uname -a
FreeBSD hunny.waitman.net 10.0-CURRENT FreeBSD 10.0-CURRENT #0: Sat Jun 2 01:25:21 PDT 2012 root@:/usr/obj/usr/src/sys/KEYSHIA amd64
$ qmake-qt4 --version
QMake version 2.01a
Using Qt version 4.8.1 in /usr/local/lib/qt4
I selected the QGraphicsView / QGraphicsScene / QPixMap because it seems to be the best to allow the user the zoom in/out. (?)
At the moment the idea is to use a Horizontal Slider for zoom but i'm not yet decided and haven't gotten that far with it. Still working out the details.
void MainWindow::loadImage() {
QString path;
QList<QUrl> urls;
urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::HomeLocation))
<< QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation))
<< QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation))
<< QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::PicturesLocation));
QFileDialog dialog;
dialog.setSidebarUrls(urls);
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setViewMode(QFileDialog::Detail);
dialog.setAcceptMode(QFileDialog::AcceptOpen);
dialog.setLabelText(QFileDialog::FileName,"Choose an image file to open");
if (dialog.exec()) {
QStringList fileNames = dialog.selectedFiles();
path = fileNames[0];
ui->lineEdit->setText( path );
QPixmap pm(path);
gs->clear();
gs->addPixmap(pm);
gs->setSceneRect(pm.rect());
gv->setScene(gs);
gv->update();
if ((gs->width() > gv->width()) || (gs->height() > gv->height())) {
gv->fitInView(gv->sceneRect(),Qt::KeepAspectRatio);
int hv = qCeil(gv->width()/gs->width()) * 100;
ui->horizontalSlider->setMaximum(hv*2);
ui->horizontalSlider->setSliderPosition(hv);
} else {
gv->resetTransform();
}
}
}
Maybe QPainter is a better way, I'll check it out. I'm just working with one image a time.
Thank you,
--
Waitman Gobble
San Jose California USA
More information about the Interest
mailing list