У меня есть скрипт Qt GUI, написанный на Ruby, который я хотел бы получать от DBus, когда обнаруживается новое USB-устройство.Сценарии работают, если я подключаю к своему слоту сигнал DBUS без каких-либо параметров, но это не дает мне никакой информации о том, какое устройство было вставлено.Однако, используя QDBusObjectPath в качестве параметра моего слота (это прекрасно работает с C ++), я столкнулся с некоторой ошибкой связывания "ruby-1.9.3-p0 / gems / qtbindings-4.6.3.4 / lib / Qt / qtruby4.rb:469: в `qt_metacall ': невозможно обработать' QDBusObjectPath & 'в качестве аргумента слота (ArgumentError)", когда Qt пытается вызвать мой слот.
Кто-нибудь здесь знаком с внутренней работой привязки Qt Ruby знает, что можетдать мне несколько советов по получению информации о USB-устройстве, вставленном в систему?Заранее спасибо.
Вот код, который у меня есть:
require 'Qt'
class MyDisk < Qt::Object
slots 'on_device_added_ext(QDBusObjectPath)',
'on_device_removed_ext(QDBusObjectPath)'
def initialize
super
end
def on_device_added_ext message
puts "Deviced Added with path = #{message.path()}"
end
def on_device_removed_ext message
puts "Deviced Removed with path = #{message.path()}"
end
end
app = Qt::Application.new ARGV
test = MyDisk.new
ret = Qt::DBusConnection::systemBus().connect(
"org.freedesktop.UDisks",
"/org/freedesktop/UDisks",
"org.freedesktop.UDisks",
"DeviceAdded",
test, SLOT('on_device_added_ext(QDBusObjectPath)'))
ret = Qt::DBusConnection::systemBus().connect(
"org.freedesktop.UDisks",
"/org/freedesktop/UDisks",
"org.freedesktop.UDisks",
"DeviceRemoved",
test, SLOT('on_device_removed_ext(QDBusObjectPath)'))
app.exec