Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QLabel Pixmap doesnt match with true size
Qt 6.12 LTS is out! See what's new in the release blog

QLabel Pixmap doesnt match with true size

Scheduled Pinned Locked Moved Unsolved General and Desktop
14 Posts 5 Posters 4.9k Views 3 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.
  • Pl45m4P Pl45m4

    @Infestor said in QLabel Pixmap doesnt match with true size:

    point 0,0 in the minimap widget is not part of the image.

    There might be some margin / border.

    Btw: What coordinate system do you use, when you print out the point, where you have clicked?
    The result you get could be in parent coordinates.

    I Offline
    I Offline
    Infestor
    wrote on last edited by Infestor
    #4

    @Pl45m4 Yes i think thats the case too. I have a layout that adds the minimap. However i thought that implementing the mousePressEvent in the minimap widget would yield the minimap coordinates and not the parent ones. Is there a way to fix this?

    mrjjM 1 Reply Last reply
    0
    • I Infestor

      @Pl45m4 Yes i think thats the case too. I have a layout that adds the minimap. However i thought that implementing the mousePressEvent in the minimap widget would yield the minimap coordinates and not the parent ones. Is there a way to fix this?

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #5

      @Infestor
      Hi
      Can you show us how you done as mousePress event override directly in the MiniMap
      should work and have top,left as 0,0

      1 Reply Last reply
      0
      • I Offline
        I Offline
        Infestor
        wrote on last edited by Infestor
        #6

        Sure, here you go

        void MiniMap::mousePressEvent(QMouseEvent* event)
        {
        	int mouse_x = event->pos().x() ;
        	int mouse_y = event->pos().y();
        
              //...logic
        
        
        }
        

        Is it needed to pass the event on to the parent?

        mrjjM 1 Reply Last reply
        0
        • I Infestor

          Sure, here you go

          void MiniMap::mousePressEvent(QMouseEvent* event)
          {
          	int mouse_x = event->pos().x() ;
          	int mouse_y = event->pos().y();
          
                //...logic
          
          
          }
          

          Is it needed to pass the event on to the parent?

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #7

          @Infestor

          Hi
          It's often best to call the base class when you override a function but
          since QLabel don't use it for any features, it's not needed in this
          case. ( but not hurt either)

          so if you qDebug()
          mouse_x and mouse_y

          they are not in local coordinates?

          I tested with

          class ClickImage : public QLabel
          {
              Q_OBJECT
          public:
              explicit ClickImage(QWidget *parent = nullptr)
                  : QLabel(parent) {}
              ~ClickImage() {}
          signals:
              void clicked(int x, int y);
          protected:
              void mousePressEvent(QMouseEvent *event) override
              {
                  int mx = event->pos().x();
                  int my = event->pos().y();
                  qDebug() << mx << "-" << my;
                  emit clicked(mx, my);
              }
          };
          

          and the mx and my are as expected so not sure why it would be for you.

          Are you sure you adjusted the logic to now be inside the minimap ?

          1 Reply Last reply
          1
          • I Offline
            I Offline
            Infestor
            wrote on last edited by
            #8

            Sorry but what do you mean by adjusting the logic? The only thing this class does or add can be seen in my initial post. Does adding stretching/spacing mess with the coordinates? I appreciate your effort though.

            mrjjM 1 Reply Last reply
            0
            • I Infestor

              Sorry but what do you mean by adjusting the logic? The only thing this class does or add can be seen in my initial post. Does adding stretching/spacing mess with the coordinates? I appreciate your effort though.

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #9

              @Infestor
              Nope, if the widget is shown(visible) it should always be correct.

              By adjusting logic i mean if you fixed the offset before and then move code, then
              that part would no longer be needed.

              So if you print out your mouse_x and mouse_y what do they show ?

              1 Reply Last reply
              1
              • I Offline
                I Offline
                Infestor
                wrote on last edited by
                #10

                The top left corner of the image starts at 10, 10. It generally seems like that there is a ~10 pixel wide border around the image. And no the image doesnt have that border so thats not the problem.

                1 Reply Last reply
                0
                • Christian EhrlicherC Offline
                  Christian EhrlicherC Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on last edited by
                  #11

                  Did you set the label size to the size of the pixmap? I don't see this so the label may be bigger than the pixmap. Also you're leaking the QPixmap instance - no need to create a pointer here.

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  1 Reply Last reply
                  2
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #12

                    Hi
                    Also notice the layout_ has a margin of 9 pr default.

                    layout_->setContentsMargins(0,0,0,0); to be sure its not that.

                    1 Reply Last reply
                    2
                    • I Offline
                      I Offline
                      Infestor
                      wrote on last edited by Infestor
                      #13

                      Edit: @mrjj Thank you so much, that was the issue. How would you know that though...

                      Also how am i leaking pixmap memory? I free the pixmap in the destructor which isnt shown here.

                      mrjjM 1 Reply Last reply
                      0
                      • I Infestor

                        Edit: @mrjj Thank you so much, that was the issue. How would you know that though...

                        Also how am i leaking pixmap memory? I free the pixmap in the destructor which isnt shown here.

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #14

                        @Infestor
                        Super
                        well i have had other cases with mysterious gaps and your "~10 pixel wide border " reminded me.

                        Well then you dont leak it then but you also don't need to as QPixmap is meant to be copied (and its cheap)

                        QPixmap p("minimap.png");
                        l->setPixmap(p);

                        is better as then we cant forget to delete the pixmap and setPixmap copies it anyway.

                        When ever you need to use * with Qt classes you give to other Qt class, its a sign you shouldn't need to new it.

                        1 Reply Last reply
                        1

                        • Login

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