2

我目前正在将信号连接到这样的函数:

 dashboard.ui.start_button_r1.connect(:clicked, dashboard.ui.start_button_r1, :handler)

哪里start_button_r1QPushButton

现在我想要的是对 中的发送小部件的引用handler,因为我将把这个信号连接到几个小部件。理想情况下,我希望我的处理函数接收一个emitter我可以玩弄的参数。我可以放在handler一个继承自Qt::Object(say HandlerContainer) 和 call的类sender()中,但是如何将信号连接到HandlerContainer的内部方法?我试过instance.method(:handler)了,但是 connect 没有以这种方式接收插槽

我通常在 PyQt 中使用这种方法,但不知道如何使用 Ruby 来实现。我觉得我在做一些非常错误的事情,因为没有太多关于如何使用 QtRuby 从插槽中获取发件人的讨论。通常是怎么做的?我已经阅读了有关 QSignalMapper 的信息,但这对于我的用例来说似乎太过分了。

4

1 回答 1

1

您可以使用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
于 2013-11-27T14:51:38.177 回答