ruby - 使用 QtRuby 获取对发射小部件的引用

标签 ruby qt qtruby

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

 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/

相关文章:

mysql - Ruby + mysql2 查询因变量而失败

javascript - 如何从Excel中的验证列表中获取单元格行

ruby-on-rails - 在 activerecord 模型中重新定义 *_before_type_cast 有什么影响

ruby File.new `initialize' : No such file or directory

c++ - 使用 Qt/C++ 的排序算法 - 对结构的 QList 进行排序

Ruby、Qt 和第三方小部件

AMD64 上的 ruby​​ postgreSQL 适配器

c++ - Qt - 4.7.3 - 如何进行静态构建

python - 在 QT Creator 中使用 C++ 调用 Python 脚本