我目前正在将信号连接到这样的函数:
dashboard.ui.start_button_r1.connect(:clicked, dashboard.ui.start_button_r1, :handler)
其中 start_button_r1
是一个 QPushButton
现在我想要的是对 handler
中发送小部件的引用,因为我会将此信号连接到多个小部件。理想情况下,我希望我的处理程序函数接收一个我可以使用的 emitter
参数。我可以将 handler
放在继承自 Qt::Object
的类中(比如 HandlerContainer
)并调用 sender()
,但是我如何将信号连接到 HandlerContainer
的内部方法?我尝试了 instance.method(:handler)
,但 connect 不会以那种方式接收插槽
我通常在 PyQt 中使用这种方法,但不知道如何在 Ruby 中使用。我觉得我在做一些非常错误的事情,因为没有太多关于如何使用 QtRuby 从插槽中获取发件人的讨论。通常是怎么做的?我读过 QSignalMapper,但这对我的用例来说似乎太过分了。
最佳答案
您可以使用 QObject::sender() 来完成功能。正如您在 handler
插槽中所说,将 sender()
类型转换为您期望的类型,在您的情况下为 QPushButton
,并且您已经获得了对发件人对象的引用。
在c++中可以这样写:
// inside handler method
QPushButton *tmpBtn= dynamic_cast<QPushButton*>(sender());
编辑:
A minimal example on how to do this in Ruby:
class SlotContainer < Qt::Object
slots "handler()"
def handler
puts "called by: " + sender().to_s
end
end
if $0 == __FILE__
app = Qt::Application.new(ARGV)
ui = Ui_MainWindow.new
container = SlotContainer.new
window = Qt::MainWindow.new
ui.setupUi(window)
Qt::Object.connect(ui.pushButton, SIGNAL("clicked()"), container, SLOT("handler()"))
window.show
app.exec
end
关于ruby - 使用 QtRuby 获取对发射小部件的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177901/