В ожидании службы DBUS будет доступна в QTC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 В ожидании службы DBUS будет доступна в QT

Сообщение Anonymous »

С помощью прокси QT DBUS, построенного на QdbusabStractInterface (через QDBUSXML2CPP), какой способ обработки услуги/объекта, который вы хотите взаимодействовать с тем, чтобы быть доступным, когда вы начинаете? Примечание: я не заинтересован в том, чтобы просто знать это (вы можете использовать blahservice.isvalid (), чтобы выяснить это); Я хочу быть в состоянии узнать, действителен ли это, и знаю, когда он становится действительным, чтобы я мог изменить состояние (и транслировать это изменение состояния с помощью сигнала), и при этом изменение состояния делают другие вещи. И наоборот, я хочу знать, когда это больше не является действительным по аналогичным причинам.#define CONNECT_DBUS_SIG(x,y) connect(blah,SIGNAL(x),this,SLOT(y))

// FIX - should watch for service, and also handle it going away and
// coming back
blah = new BlahService("com.xyzzy.BlahService", "/com/xyzzy/BlahService",
QDBusConnection::sessionBus(), this);
if (!blah)
return 0;
if (blah.isValid())
{
CONNECT_DBUS_SIG(foo(),Event_foo());
}
else
{
// Since we aren't watching for registration, what can we do but exit?
}
< /code>

Наверное, нам нужно наблюдать за nameownerchanged на объекте подключения DBUS - если код QT DBUS не делает это для нас - а затем, когда мы получаем это состояние изменения сигнала и, если необходимо Подключите или отключите сигналы от объекта. с этим уходит. Пример QT Car /Controller, по крайней мере, замечает, уходит ли сервер, и печатает «отключен», если isvalid () становится ложным во время использования, но это опрос isvalid (). < /P>

Добавлено: < /p>

Обратите внимание, что QtdbusabtractInterface Registers для изменений владения сервером (nameownerchanged) и обновления isvalid () Когда происходят изменения. Поэтому я подозреваю, что вы можете подключиться к этому сигналу ServerownerChanged напрямую, чтобы узнать об изменениях в владении и использовать его в качестве индикатора, чтобы попробовать еще раз - хотя вы не сможете доверять IsValid, поскольку он может быть обновлен до или после того, как вы получите сигнал. < /p>

Альтернативно (уродливое) вы можете настроить таймер и опрос для isvalid (). < /p>

Подробнее здесь: https://stackoverflow.com/questions/142 ... able-in-qt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»