【问题标题】:Qtruby ListWidgetItem has blank icon after adding data添加数据后,Ruby QListWidgetItem 有空白图标
【发布时间】:2015-02-05 01:13:18
【问题描述】:

我正在使用 qtruby 开发 GUI。我有一个用 ListWidgetItems 填充的 ListWidget。到目前为止,这些仅包含我想要显示的文本,并且一切正常。我希望这些项目还可以保存一些隐藏数据,以便在单击它们时使用。我使用 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 )

【问题讨论】:

    标签: ruby qt qtruby


    【解决方案1】:

    setData 的第一个参数是角色编号,出于某种原因,您选择将其设置为 1。documentation 表示:“要以图标形式呈现为装饰的数据。(QColor , QIcon 或 QPixmap)”。所以你告诉 Qt 显示一个图标,但你没有给它一个有效的图标对象。

    尝试将角色设置为Qt::UserRole,即“可用于特定应用目的的第一个角色”。我不确定如何从 Ruby 访问该常量。如果 qtruby gem 没有提供它,我想你可以使用 0x100。

    【讨论】:

    • 我不建议在代码中硬编码 32。你应该使用Qt::UserRole
    • 哦,是的,他们在 Qt 5 中将其更改为 0x100。我将编辑帖子。
    • 如果我想附加多个值,我是否会为每个新项目从 Qt::UserRole 递增?
    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多