Qtruby ListWidgetItem имеет пустой значок после добавления данных

Я работаю над графическим интерфейсом, используя qtruby. У меня есть ListWidget, который я заполняю ListWidgetItems. До сих пор они содержали только текст, который я хотел отобразить, и все работало нормально. Я хотел, чтобы эти элементы также содержали некоторые скрытые данные, которые можно использовать при нажатии на них. Я использовал ListWidgetItem.setData() для установки данных, и я могу получить данные из него, когда он просто щелкнут. Однако, как только я добавляю данные, отображаемый текст теперь смещается вправо примерно на 4 пробела. Когда я нажимаю на него, вокруг текста появляется небольшой пунктирный прямоугольник, но не добавленное пространство. Похоже, это место для значка, но я не установил ни одного значка, и мне он не нужен. Как мне избавиться от этого лишнего пространства, чтобы элементы, содержащие данные, были выровнены со всем?

Код очень прост:

item = Qt::ListWidgetItem.new( @grain_strings[index] )
item.setFont( @font )
# TODO this is causing the text to be indented, removing it removes the indent 
item.setData( 1, Qt::Variant.from_value( grain.type ) )
@item_list.insertItem( @end_of_grains+1, item )

person jgelderloos    schedule 05.02.2015    source источник


Ответы (1)


Первый аргумент setData — это номер роли, и по какой-то причине вы решили установить для него значение 1. Отношение документация гласит: "Данные для рендеринга в качестве украшения в виде значка. (QColor, QIcon или QPixmap)". Таким образом, вы говорите Qt отображать значок, но не даете ему действительный объект значка.

Попробуйте установить роль Qt::UserRole, что является «первой ролью, которую можно использовать для конкретных целей приложения». Я не уверен, как получить доступ к этой константе из Ruby. Если это не предусмотрено драгоценным камнем qtruby, я полагаю, вы могли бы использовать 0x100.

person David Grayson    schedule 05.02.2015
comment
Я не рекомендую жестко кодировать 32 в коде. Вы должны использовать Qt::UserRole. - person Pavel Strakhov; 05.02.2015
comment
Ах да, в Qt 5 поменяли на 0x100. Пост отредактирую. - person David Grayson; 05.02.2015
comment
Если я хочу, чтобы несколько значений были прикреплены, я просто увеличивал бы Qt::UserRole для каждого нового элемента? - person jgelderloos; 05.02.2015