How do I remove white border around QScrollArea?

  • I'm trying to edit the source of an app called qcomicbook ( ), to remove an annoying 1px white border which persists in full-screen mode.

    First I tried changing the background of the main window black, but it had no effect. Here is the newly compiled app against the designer preview:


    I tried also setting some border and margin style information but the white border remained, so I looked at the cpp source, searched the Qt docs, and made a few simple edits, but they had no effect.

    At first I thought this would be a quick cosmetic fix, but now I assume the developer could not find the cause.

    He has this inside PageViewBase.cpp:

    @PageViewBase::PageViewBase(QWidget *parent, int physicalPages, const ViewProperties &props)
    : QScrollArea(parent)
    , m_physicalPages(physicalPages)
    , props(props)
    , smallcursor(NULL)
    context_menu = new QMenu(this);
    connect(&this->props, SIGNAL(changed()), this, SLOT(propsChanged()));


    This inside ContinuousPageView.cpp:

    ContinuousPageView::ContinuousPageView(QWidget *parent, int physicalPages, const ViewProperties& props)
    : PageViewBase(parent, physicalPages, props)
    , m_firstVisible(-1)
    , m_firstVisibleOffset(0)
    , m_y1pos(NULL)
    , m_y2pos(NULL)

    QWidget *w = new QWidget(this);

    // w->setColor(QPalette::Background, Qt::black);
    // adding above line didn't work
    w->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
    m_layout = new QVBoxLayout(w);
    m_layout->setContentsMargins(0, 0, 0, 0);
    // changing above line didn't change anything

    setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    // track scrollbar range changes to restore its relative position
    connect(verticalScrollBar(), SIGNAL(rangeChanged(int, int)), this, SLOT(scrollbarRangeChanged(int, int)));


    And this inside ComicMainWindow.cpp:

    void ComicMainWindow::setupComicImageView()
    const int n = (sink != NULL ? sink->numOfImages() : 0);
    if (view)
    const ViewProperties props;
    if (cfg->continuousScrolling())
    view = new ContinuousPageView(this, n, props);
    view = new SimplePageView(this, n, props);

    connect(actionPageTop, SIGNAL(triggered(bool)), view, SLOT(scrollToTop()));



  • Hi,

    QScrollArea is a QFrame descendant. If you set the frame shape to QFrame::NoFrame


    it should disappear ... did I understand your point?


  • Tony, thanks, but this did not remove the border.

    In Qt, is QFrame the only class which has paints a border?


  • Well, I'm not sure that's the only one. QFrame is a QWidget with a border, so I guess that any widget that'd like to be surrounded by a border, can descend directly from QFrame.

    Anyway, it's really strange that your border does not disappear. If you place a QScrollArea on a QWidget with Qt Designer, you can test it by yourself and it works (are you sure it's a QScrollArea???)

    I can just think about two causes:

    a) a particular stylesheet is present, and it draws a border. In this case, you should remove it there.
    b) it has a custom paint event. It shouldn't be so difficult to remove any suspicious drawRect inside that method.


  • Ok, setFrameShape did work actually. The other day I was running make from vi in the wrong dir.

    Thanks for the help.


Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.