Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] zoom to fit in QGraphicsView
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] zoom to fit in QGraphicsView

Scheduled Pinned Locked Moved General and Desktop
13 Posts 3 Posters 13.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    goblincoding
    wrote on last edited by
    #2

    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.

    http://www.goblincoding.com

    1 Reply Last reply
    0
    • J Offline
      J Offline
      jk_mk
      wrote on last edited by
      #3

      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));@

      1 Reply Last reply
      0
      • L Offline
        L Offline
        loladiro
        wrote on last edited by
        #4

        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?

        1 Reply Last reply
        0
        • J Offline
          J Offline
          jk_mk
          wrote on last edited by
          #5

          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);
          

          }@

          1 Reply Last reply
          0
          • L Offline
            L Offline
            loladiro
            wrote on last edited by
            #6

            @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));
            }
            

            @

            1 Reply Last reply
            0
            • J Offline
              J Offline
              jk_mk
              wrote on last edited by
              #7

              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?

              1 Reply Last reply
              0
              • L Offline
                L Offline
                loladiro
                wrote on last edited by
                #8

                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!

                1 Reply Last reply
                0
                • J Offline
                  J Offline
                  jk_mk
                  wrote on last edited by
                  #9

                  Yes, this is it!

                  Thanks a lot for your help

                  1 Reply Last reply
                  0
                  • L Offline
                    L Offline
                    loladiro
                    wrote on last edited by
                    #10

                    Glad I could help. And don't forget to add [Solved] to the title.

                    1 Reply Last reply
                    0
                    • J Offline
                      J Offline
                      jk_mk
                      wrote on last edited by
                      #11

                      How do I add the [Solved]?

                      1 Reply Last reply
                      0
                      • L Offline
                        L Offline
                        loladiro
                        wrote on last edited by
                        #12

                        Click on edit in the original post and then change the title.

                        1 Reply Last reply
                        0
                        • G Offline
                          G Offline
                          goblincoding
                          wrote on last edited by
                          #13

                          Thanks for the question and the input. I definitely got something from this thread :)

                          http://www.goblincoding.com

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved