Использование QtRuby с сигналами DBus - PullRequest
1 голос
/ 29 февраля 2012

У меня есть скрипт 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
...