[SOLVED] zoom to fit in QGraphicsView
-
Perhaps I don't entirely understand your question, but from what you've given here, it seems to me as if you have:
QGraphicsView coords = QGraphicsScene coords = YourPixMap coords = (214,256)
So what you're getting is right.
-
To be more specific, lets suppose that I want to diaplay an image of (100,100) and my QGraphicsView coords = QGraphicsScene coords =(214,256).
Then if I use in my code this@tmpmap.scaled (100,100)@
and press the mouse on my displayed image, I get coordinates between (100,100), this is correct.
But when I am using this in my code:
@tmpmap.scaled (214,256)@
then my image is zoomed to fit to my QGraphicsView, but when I press the mouse I get coordinates (214,256).The right would be to take coordinates (100,100), as the real size of my image.Do you know how this could be done?
I include my code of the mouse press event, in case there is here any mistake
@void MainWindow::mousejustpressed_x(int z,int y)
{int k1=size_y-y;
unsigned char value;
QImage image(scene->sceneRect().size().toSize(),
QImage::Format_RGB32);QPainter painter(&image);
scene->render(&painter);value=image.pixel(z,k1);
ui->label_13->setText(QString("z:%1").arg(z)); ui->label_14->setText(QString("y:%1").arg(k1));
ui->label_15->setText(QString("pixel value:%1").arg(value));@
-
I think what you want to do is use a 100x100 scene, scale that to fit your graphics view with QGraphicsView::scale and then you can use the mapFromScene and mapToSence functions to get what you want. Does that help?
-
I have managed to fit my scene to QGraphicsView by using these:
@Canvas::Canvas(): QGraphicsScene(0,0,214,256)
{
}@and
@ if (!pixmapItem) {QPixmap tmpmap (QPixmap(fileName, 0, Qt::AutoColor)); pixmapItem = scene->addPixmap ( tmpmap.scaled (214,256) ); ui->graphicsView_inputImage->setScene(scene); } else {
QPixmap tmpmap (QPixmap(fileName, 0, Qt::AutoColor));
pixmapItem->setPixmap(tmpmap.scaled (214,256));
}@But still I have the problem of the real coordinates. Now in x coordiantes I am taking these (0,214) and in y coordinates I am taking these (-100,100).Could you explain how to do the mapToScene? What I should write as a press mouse event instead of these?
@void MainWindow::mousejustpressed(int x,int y)
{
int k1=size_y-y;unsigned char value;
QImage image(scene->sceneRect().size().toSize(), QImage::Format_RGB32); QPainter painter(&image); scene->render(&painter); value=image.pixel(x,k1);
}@
-
@Canvas::Canvas(): QGraphicsScene(0,0,100,100)
{
}
@@QPixmap tmpmap (fileName, 0, Qt::AutoColor);
if (!pixmapItem) {
pixmapItem = scene->addPixmap (tmpmap);
ui->graphicsView_inputImage->setScene(scene);
ui->graphicsView_inputImage->scale(ui->graphicsView_inputImage->width()/scene->width(),
ui->graphicsView_inputImage ->height()/scene->height());
} else {
pixmapItem->setPixmap(tmpmap);
}@@ void MainWindow::mousejustpressed(int x,int y)
{unsigned char value; QImage image(scene->sceneRect().size().toSize(), QImage::Format_RGB32); QPainter painter(&image); scene->render(&painter); value=image.pixel(ui->graphicsView_inputImage->mapToScene(x,y)); }
@
-
Thanks for your reply, now I am getting to the point.But when I run this code I get one error:
_ error C2664: 'QRgb QImage::pixel(const QPoint &) const' : cannot convert parameter 1 from 'QPointF' to 'const QPoint &'_
Do you know how it could be solved?
-
Sorry I forgot the toPoint():
@
void MainWindow::mousejustpressed(int x,int y)
{unsigned char value;
QImage image(scene->sceneRect().size().toSize(), QImage::Format_RGB32); QPainter painter(&image); scene->render(&painter); value=image.pixel(ui->graphicsView_inputImage->mapToScene(x,y).toPoint());
}@
Hope that helps! -
Yes, this is it!
Thanks a lot for your help
-
Glad I could help. And don't forget to add [Solved] to the title.
-
How do I add the [Solved]?
-
Click on edit in the original post and then change the title.
-
Thanks for the question and the input. I definitely got something from this thread :)