Important: Please read the Qt Code of Conduct -

QGraphicsView has ~1 pixel margin for QPixmap

  • I've created a QMainWindow, which sets it's center widget to a QGraphicsView.
    The QGraphicsView displays a QGraphicsScene with a single QPixmap inside it.

    The whole thing spans across all Screens and just displays a screenshot of all screens in the QPixmap.

    This is my constructor:

    // These are in the initializer list
    auto scene = new QGraphicsScene;
    auto view = new QGraphicsView(scene, this);
    // Gets a Screenshot of all screens

    Now once this window gets displayed, the Screenshot is moved to the right and down by about one pixel. (Which means there is a white border at the left and top screen)

    How it should be:

    How it actually is (I've made the top border red, left border white):

    It seems like the QGraphicsScene indents all contents by one pixel so it is "visually inside" the outer widget/container (QGraphicsView)

    Is there any way to get around this and remove that border?

    When I used a QLabel and set the Pixmap via that, there was no border. I moved to the QGraphicsView because apparently that one is better if I want to draw plenty of rectangles onto it later on.. is that correct?

    This whole thing is a Screenshot tool, so only an overlay where the user can crop out a rectangle (and also I can highlight windows with rectangles), is it a good idea for that to use a QMainWindow and by code only or should I use .ui files? Also is QGraphicsView the right option here? I want to draw a rectangle whenever the user hovers over certain areas.


  • @mrousavy The solution is to set no frame style.


Log in to reply