gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:27 26 4
gpt4 key购买 nike

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

 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com