2014-10-27 5 views
3

У меня возникла проблема с QScrollArea.QScrollArea удаляет пространство между содержимым области и полосой прокрутки.

В частности, я не могу найти правильное правило QSS для удаления пространства 3px между QSrollArea QFrame и QScroll.

Пространство, которое я хотел бы удалить, - это тот, который указан красной стрелкой на картинке. Я также добавил синюю границу к внутреннему QFrame QSrollArea, но, похоже, он заканчивается правильно.

Изображение можно найти здесь: http://i58.tinypic.com/2h71a2c.png

Я использую QT 4.8.5 на SP2 SLED 11 (под GNOME).

Мой QSS выглядит следующим образом:

QScrollArea { 
    background: transparent; 
} 

QScrollArea > QWidget > QWidget 
{ 
    background: transparent; 
    border: 1px solid black; 
    margin: 0px 0px 0px 0px; 
}  

QScrollBar:horizontal 
{ 
    border: 1px solid #999999; 
    background:white; 
    height:7px; 
    margin: 0px 0px 0px 0px; 
    padding: 0px 0px 0px 0px; 
} 

QScrollBar::handle:horizontal { 
    background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130), stop:1 rgb(32, 47, 130)); 
    min-width: 20px; 
} 

QScrollBar::add-line:horizontal { 
    background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130), stop:1 rgb(32, 47, 130)); 
    height: 0px; 
    subcontrol-position: right; 
    subcontrol-origin: margin; 
} 

QScrollBar::sub-line:horizontal { 
    background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130), stop:1 rgb(32, 47, 130)); 
    height: 0px; 
    subcontrol-position: left; 
    subcontrol-origin: margin; 
} 

Любые идеи?

Спасибо.

+0

Это, по-видимому, дефект в самой Qt. См. Http://stackoverflow.com/a/11268557/266309 для решения (вам нужно подклассифицировать QScrollArea и переопределить метод setViewportMargins). – waldyrious

ответ

0

Обязательно ли это делать от QSS и QSS? Я думаю, что изменение layoutBottomMarginscrollAreaWidgetContents (, т. Е. виджет внутри QScrollArea) решит проблему.

+0

Это не обязательно. Но по мере того как мое изображение показывает, что я помещаю синюю рамку в виджет внутри области прокрутки, и я установил маржу в 0. – Lorenzo

+0

Кажется, что есть какой-то макет QT, который помещает полосу прокрутки под виджет содержимого ... – Lorenzo

+0

I также можно добавить, что я задал свойства QFrame следующим образом (я использую конструктор qtcreator): frameshape = NoFrame, frameShadow = Plain, lineWidth = 0 и midLineWidth = 0. Может быть, это может помочь. – Lorenzo