2015-03-03 2 views
1

Цель:
Я пытаюсь отобразить несколько экземпляров настраиваемого виджета в списке. Виджет может содержать длинные пользовательские пути, поэтому у меня есть класс, полученный из QLabel, который может удалять текст [0] (ElidedLabel). Элементы списка должны быть выбраны, поэтому я использую QListWidget для их отображения. Экземпляр указанного пользовательского виджета затем устанавливается как элементный виджет для каждого объекта QListWidgetItem.
ElidedLabel реализован как предложено здесь: Status bar and elided labelИзменить ширину виджета элемента (содержимое списка) родительской ширине QListWidget

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

Что я пробовал:
я поставил вместе minimal example, демонстрирующие фиктивный «пользовательский виджет», который elides штраф в детстве обычного макета в главном окне. Тот же виджет делает не правильно высвечивается как элементный виджет в QListWidget.
Формат SizePolicies установлен на Preferred везде, но мне кажется, что я играл со всем остальным. У ElidedLabel минимальная ширина равна 1, чтобы уменьшить ее. Ограничения макета оставались по умолчанию. У QListWidget установлен ResizeMode значение Adjust.

SO не позволит мне опубликовать скриншот, найти его здесь: HT * пс: //filetrain.de/elidetest.png

[0]: Elide: отрезать текст, который не приспосабливать и заменить его многоточием ('...')

ответ

0

Добавьте эти два метода ElidedLabel

virtual QSize minimumSizeHint() const 
{ 
    return QSize(0, QLabel::minimumSizeHint().height()); 
} 
virtual QSize sizeHint() const 
{ 
    return QSize(0, QLabel::sizeHint().height()); 
} 
Смежные вопросы