Unsolved QLabel Pixmap doesnt match with true size
-
@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. -
@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?
-
@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 -
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?
-
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_ythey 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 ?
-
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.
-
@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 ?
-
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.
-
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.
-
Hi
Also notice the layout_ has a margin of 9 pr default.layout_->setContentsMargins(0,0,0,0); to be sure its not that.
-
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.
-
@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.