Search code examples
rubyqtqtruby

QtRuby GridLayout- undefined method 'addWidget'


I'm working on a GUI project using QtRuby. However, as soon as I added code to use a GridLayout in my MainWindow object, I started receiving this error:

mainwindow.rb:37:in `method_missing': undefined method `addWidget' for #<Qt::GridLayout:0x0000000221cbc0 objectName=""> (NoMethodError)
from mainwindow.rb:37:in `initialize'
from main.rb:5:in `new'
from main.rb:5:in `block in <main>'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:2652:in `instance_eval'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:2652:in `run_initializer_block'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:459:in `initialize'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:459:in `initialize'
from main.rb:4:in `new'
from main.rb:4:in `<main>'

Here is the code for my MainWindow class:

require 'Qt4'
require_relative '../eventhandler.rb'
require_relative '../editor/editorwidget.rb'
class MainWindow < Qt::MainWindow
    # ...
    def initialize(parent = nil)
        super(parent)
        # ...
        @layout = Qt::GridLayout.new
        @fsModel = Qt::FileSystemModel.new
        @layout.addWidget(@fsModel, 0, 0, 1, 1)
        @editor = EditorWidget.new
        @layout.addWidget(@editor, 1, 0, 4, 1)
    end
end

Solution

  • I figured out my problem- I was trying to add a model to the layout, without a view. Here is my fixed code:

    # ...
    @layout = Qt::GridLayout.new
    @fsModel = Qt::FileSystemModel.new
    @fsView = Qt::TreeView.new
    @fsView.setModel(@fsModel)
    @layout.addWidget(@fsView, 0, 0, 1, 1)
    @editor = EditorWidget.new
    @layout.addWidget(@editor, 1, 0, 4, 1)
    # ...