Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: romanick от Март 30, 2013, 08:33



Название: QListWidget padding
Отправлено: romanick от Март 30, 2013, 08:33
Добрый день!
Как сделать padding у QListWidget?
Код:
QListWidget* cw;
...
cw->setStyleSheet("padding-left: 20px");
Не работает, хотя в документации указано что поддерживается "модель коробки".
Мне просто нужно сделать чтобы слева от списка элементов было побольше места.
В гугле, в том числе англоязычном, куча подобных вопросов без ответа...


Название: Re: QListWidget padding
Отправлено: Bepec от Март 30, 2013, 10:13
Тебе нужно добавить ::Item. Как то так.
Ведь на деле наверно тебе нужен padding элементов.

PS хотя как знать.


Название: Re: QListWidget padding
Отправлено: twp от Март 30, 2013, 19:19
скорее всего не получится сделать такое через qss поскольку "модель коробки" работает для самого QListWidget, а отступ нужно сделать в его вьюпорте. По идее тебе нужно это
Код
C++ (Qt)
void QAbstractScrollArea::setViewportMargins ( int left, int top, int right, int bottom ) [protected]
 
Пример использования с отрисовкой в этом отступе можно найти в QTDIR\examples\widgets\codeeditor\


Название: Re: QListWidget padding
Отправлено: Kolobok от Март 30, 2013, 19:29
Возьми QTreeWidget. Там есть отступ.


Название: Re: QListWidget padding
Отправлено: romanick от Март 30, 2013, 22:05
Придумал вот такое решение:
ObjectItemDelegate - наследник от QStyledItemDelegate.

void ObjectItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem o = option;
o.rect.setLeft(o.rect.left()+20);
QStyledItemDelegate::paint(painter, o, index);
}

Несколько криво, но мне подходит.


Название: Re: QListWidget padding
Отправлено: romanick от Март 30, 2013, 22:20
скорее всего не получится сделать такое через qss поскольку "модель коробки" работает для самого QListWidget, а отступ нужно сделать в его вьюпорте. По идее тебе нужно это
Код
C++ (Qt)
void QAbstractScrollArea::setViewportMargins ( int left, int top, int right, int bottom ) [protected]
 
Пример использования с отрисовкой в этом отступе можно найти в QTDIR\examples\widgets\codeeditor\

Код:
void ContentWidget::setViewportMargins(int left, int top, int right, int bottom)
{
    QListWidget::setViewportMargins(left+20, top, right, bottom);
}
Так не работает. Отступа нет.


Название: Re: QListWidget padding
Отправлено: Bepec от Март 31, 2013, 10:20
Нарисуй-ка ты то, чего хочешь. А я, когда пойму, постараюсь тебе помочь.


Название: Re: QListWidget padding
Отправлено: romanick от Март 31, 2013, 12:50
Нарисуй-ка ты то, чего хочешь. А я, когда пойму, постараюсь тебе помочь.

Нарисовал. Я хочу расширить с помощью css или как-то ещё область отмеченную красными стрелками. Чтобы, например, было удобнее выделять элементы прямоугольником, начиная от области слева от них.
Решение в три строчки вообще-то я придумал (см. выше), но оно кривовато по субъективным ощущениям.