リストビューをつくる
Ruby/Qteの勉強 その14
リストビュー(表?)を作ってみる、使用するクラスはQListViewである。@listを作成したら、.addColumnメソッドでカラムを追加していく。
@list = QListView.new(self) @list.setGeometry(0,40,635,230) @list.addColumn(tr("カラム1")) #カラム追加 @list.addColumn(tr("カラム2"))
アイテムの追加は、QListViewItemを使用する。引数はカラム数によって変化する。
QListViewItem.new(@list, "21", "22") #カラムが2つなのでセットする値も2つ
アイテムは上下カーソルキー+Enterや画面のタップで選択可能で、以下の記述で選択アイテムをメソッドに渡すことができる。
connect(@list, QSIGNAL("clicked(QListViewItem *)"), self, "dispItem") connect(@list, QSIGNAL("returnPressed(QListViewItem *)"), self, "dispItem")
アイテム選択で、そのアイテムのデータを表示。ボタン1で全アイテムのカラム1のデータを表示するようにしてみる。
アイテム内のデータの表示はitem.text(0).to_strのようにする、引数はカラムの番号。なお、.to_sメソッドは使えなかった。
#!/usr/bin/env ruby require "qte" require "qpe" include Qte include Qpe class SampleWindow < QMainWindow def initialize() super() setCaption(tr("サンプル")) @list = QListView.new(self) @list.setGeometry(0,40,635,230) @list.addColumn(tr("カラム1")) #カラム追加 @list.addColumn(tr("カラム2")) # @list.setAllColumnsShowFocus(true) #フォーカス変更 # 2.times do |i| #2はカラム数 # @list.setColumnWidth(i, 200) #カラム幅変更 # @list.setColumnAlignment(i, AlignRight) #右よせに # #@list.setColumnAlignment(i, AlignHCenter) # end #選択したアイテムをメソッドdispItemへ connect(@list, QSIGNAL("clicked(QListViewItem *)"), self, "dispItem") connect(@list, QSIGNAL("returnPressed(QListViewItem *)"), self, "dispItem") #@listにアイテム追加 item = QListViewItem.new(@list, "11", "12") QListViewItem.new(@list, "21", "22") QListViewItem.new(@list, "31", "32") #値を書き換え # item.setText(0, "10") @ebox1 = QMultiLineEdit.new(self) @ebox1.setGeometry(0,280,635,120) @ebox1.setReadOnly(true) @ebox1.clear #カラム数を表示 @ebox1.insertLine(tr("column数 = " + @list.columns.to_s)) #アイテム数を表示 @ebox1.insertLine(tr("item数 = " + @list.childCount.to_s)) @pb1 = QPushButton.new(tr("ボタン1"),self) @pb1.setGeometry(320,5,100,30) connect(@pb1,QSIGNAL("clicked()"), self, 'dispCol') end def dispItem(item) #選択したアイテムのカラムを表示 @ebox1.clear @ebox1.insertLine(tr("カラム1=" + item.text(0).to_str)) @ebox1.insertLine(tr("カラム2=" + item.text(1).to_str)) # @ebox1.insertLine(item.text(0).utf8().to_str()) end def dispCol #全アイテムのカラム1を表示 @ebox1.clear item = @list.firstChild() while (!item.nil?) @ebox1.insertLine(tr("col1=" + item.text(0).to_str)) item = item.nextSibling() end end end $defaultCodec = QTextCodec.codecForName("utf8") app = QPEApplication.new([$0]+ARGV) app.setDefaultCodec($defaultCodec) QApplication.setFont(QFont.new("lcfont",18)) app.showMainWidget(SampleWindow.new) app.exec