2

rubyqt で QTableView の編集を無効にしようとしています。トリガーを QAbstractView::NoEdiTriggers に設定することで実行されるはずです:

TableView.setEditTriggers(QAbstractView::NoEditTriggers);

問題は、rubyqt が Qt::AbstractView を認識しないことです。

irb(main):008:0> require 'Qt4'
=> true
irb(main):009:0> Qt::AbstractView
NameError: uninitialized constant Qt::AbstractView
    from (irb):9:in `const_missing'
    from (irb):9
    from /usr/bin/irb:12:in `<main>'

ruby と qt で編集を無効にする別の方法はありますか?

編集 ああ、そしてirbの外:

searcher.rb:72:in `const_missing': uninitialized constant Qt::AbstractView (NameError)

そして searcher.rb:72: @ui.tableView.setEditTriggers(Qt::AbstractView::NoEditTriggers)

に変更しても(Qt::AbstractView.NoEditTriggers)機能しません。

4

1 に答える 1

2
require 'Qt4'

Qt::Application.new(ARGV) do
    Qt::Widget.new do

        self.window_title = 'Hello QtRuby v1.0'
        resize(200, 100)

        button = Qt::PushButton.new('Quit') do
            connect(SIGNAL :clicked) { Qt::Application.instance.quit }
        end

        tv = Qt::TableView.new do
          setEditTriggers(Qt::TableView::NoEditTriggers)
        end

        tm = Qt::StandardItemModel.new(1, 1) do
          setItem(0,0,Qt::StandardItem.new("aaa"))
        end

        tv.setModel tm

        self.layout = Qt::VBoxLayout.new do
            add_widget(tv, 0, Qt::AlignRight)
            add_widget(button, 0, Qt::AlignCenter)
        end

        show
    end

    exec
end

主なアイデアは、Qt の Abstract クラスが Ruby にバインドされていない場合は、その祖先または実装を探してみることです。

于 2013-05-28T11:46:07.733 に答える