Hej, używam qtbindings, ale nie potrafię przekazać wartości ustawionych w jednym oknie do drugiego okna.
W przykładowym kodzie w SubWindow ustawiam spin1 oraz spin2 i chce ich wartości odczytać w MainWindow.
Co zle robie?
[code]#!/usr/bin/env ruby
coding: utf-8
require ‘rubygems’
require ‘Qt’
module MyApp
class MainWindow < Qt::MainWindow
slots ‘subwindow()’
def initialize(parent = nil)
super
button = Qt::PushButton.new("Okno")
connect(button, SIGNAL('clicked()'), self, SLOT('subwindow()'))
@label = Qt::Label.new("")
widget = Qt::Widget.new
setCentralWidget(widget)
widget.layout = Qt::VBoxLayout.new do |l|
l.addWidget(@label)
l.addWidget(button)
end
end
def subwindow()
arr = {:spin1=>0, :spin2=>0}
window = SubWindow.new
window.windowModality = Qt::ApplicationModal
window.show
@label.setText("Spin1: #{arr[:spin1]} | Spin2: #{arr[:spin2]}")
end
end
class SubWindow < Qt::Widget
slots ‘accept()’, ‘reject()’
def initialize(parent = nil)
super(parent)
ok = Qt::PushButton.new(“OK”)
cancel = Qt::PushButton.new(“Cancel”)
connect(ok, SIGNAL(‘clicked()’), self, SLOT(‘accept()’))
connect(cancel, SIGNAL(‘clicked()’), self, SLOT(‘reject()’))
@spin1 = Qt::SpinBox.new { |s| s.range = 0…99 }
@spin2 = Qt::SpinBox.new { |s| s.range = 100…199 }
self.layout = Qt::GridLayout.new do |l|
l.addWidget(Qt::Label.new("SpinBox 1: "), 0, 0)
l.addWidget(@spin1, 0, 1)
l.addWidget(Qt::Label.new("SpinBox 2: "), 1, 0)
l.addWidget(@spin2, 1, 1)
l.addWidget(ok, 2, 0)
l.addWidget(cancel, 2, 1)
end
end
def accept()
arr = {}
arr[:spin1] = @spin1.value
arr[:spin2] = @spin2.value
# TODO Jak przekazać te wartości do okna głównego?
puts arr
close()
end
def reject()
close()
end
end
myApp = Qt::Application.new(ARGV)
mainWin = MainWindow.new
mainWin.show
myApp.exec
end[/code]