2

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 )
4

1 に答える 1

3

への最初の引数setDataはロール番号であり、何らかの理由でそれを 1 に設定することを選択しました。ドキュメントには、「アイコンの形式で装飾としてレンダリングされるデータ。(QColor、QIcon、または QPixmap)」と記載されています。したがって、Qt にアイコンを表示するように指示していますが、有効なアイコン オブジェクトを与えていません。

ロールを に設定してみてくださいQt::UserRole。これは、「アプリケーション固有の目的に使用できる最初のロール」です。Ruby からその定数にアクセスする方法がわかりません。qtruby gem で提供されていない場合は、0x100 を使用できます。

于 2015-02-05T01:21:09.447 に答える