Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: dBus org.freedesktop.Notifications в QT C++  (Прочитано 2356 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GrandPeter

  • Автор темы
  • Любитель
  • *
  • Сообщений: 78
    • Просмотр профиля
    • Проект Голос это простой граф. интерфейс  для festival
dBus org.freedesktop.Notifications в QT C++
« : 20 Июнь 2010, 21:29:48 »
Подскажите как сотворить/получить всплывающее сообщение на основе org.freedesktop.Notifications
из приложения  QT C++.
Всё что не происходит - всё к лучшему!

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: dBus org.freedesktop.Notifications в QT C++
« Ответ #1 : 20 Июнь 2010, 22:45:51 »
Вопрос очень общий. Было бы неплохо написать, что уже пробовал сделать и где произошёл затык.

В принципе в Qt есть модуль QtDbus через который можно работать с этой шиной. Дальше нужно узнать интерфейс предоставляемый сервисом org.freedesktop.Notifications и написать приложение вызывающее необходимы методы из этого интерфейса.

По тому как узнать интерфейс предоставляемый сервисом: в комплекте с Qt идёт утилита qdbus она может помочь узнать предоставляемые сервисом методы и попробовать вызвать эти методы. Поигравшись с ней 5 минут можно получить всю нужную информацию.

Оффлайн GrandPeter

  • Автор темы
  • Любитель
  • *
  • Сообщений: 78
    • Просмотр профиля
    • Проект Голос это простой граф. интерфейс  для festival
Re: dBus org.freedesktop.Notifications в QT C++
« Ответ #2 : 21 Июнь 2010, 21:23:03 »
Подскажите как сотворить/получить всплывающее сообщение на основе org.freedesktop.Notifications
из приложения  QT C++.


    И так, мне удалось отправить из приложения QT всплывающее сообщение по средством  org.freedesktop.Notifications
    код
    
(Нажмите, чтобы показать/скрыть)

    Остается понять как перехватить такое сообщение...

Кроме модуля QtDbus, для изучения DBus удобно использовать D-Bus Viewer
./qdbusviewer
« Последнее редактирование: 21 Июнь 2010, 22:20:40 от GrandPeter »
Всё что не происходит - всё к лучшему!

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: dBus org.freedesktop.Notifications в QT C++
« Ответ #3 : 21 Июнь 2010, 23:55:12 »
Под перехватом подразумевается прослушивание шины, с целью отлова вызова этого метода чужим приложением?

Я немного покопался в документации QtDBus, но что-то не нашёл как такое можно сделать. Я знаю, что через dbus-monitor можно смотреть все сообщения проходящие через шину, но вот как можно самому такое сделать не знаю.

Оффлайн GrandPeter

  • Автор темы
  • Любитель
  • *
  • Сообщений: 78
    • Просмотр профиля
    • Проект Голос это простой граф. интерфейс  для festival
Re: dBus org.freedesktop.Notifications в QT C++
« Ответ #4 : 24 Июнь 2010, 20:47:23 »
Странно, при попытки вывести кириллицу вылезает крякозябра.
(Нажмите, чтобы показать/скрыть)

 Как это можно побороть в примере выше? msg.toUtf8 не помогает.

Пользователь решил продолжить мысль 24 Июнь 2010, 21:42:15:
Странно, при попытки вывести кириллицу вылезает крякозябра.
(Нажмите, чтобы показать/скрыть)

 Как это можно побороть в примере выше? msg.toUtf8 не помогает.

А вот и нашелся ответ:
-  QString msg = "Сообщение на кириллице";
+ QString msg = QString::fromLocal8Bit(""Сообщение на кириллице");
« Последнее редактирование: 24 Июнь 2010, 21:42:15 от GrandPeter »
Всё что не происходит - всё к лучшему!

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: dBus org.freedesktop.Notifications в QT C++
« Ответ #5 : 25 Июнь 2010, 12:47:16 »
Если ты прямо в коде пишешь кирилиу, то лучще убедиться что все исходники используют кодировку Utf-8 и использовать QString::fromUtf8() так как QString::fromLocal8Bit будет интерпретировать входную сишную строку как строку в кодировке текущей локали системы. Стоит ли говорить, что эта кодировка может быть разной даже на одной и той же операционной системе на одном и том же компе у разных пользователей.

Оффлайн GrandPeter

  • Автор темы
  • Любитель
  • *
  • Сообщений: 78
    • Просмотр профиля
    • Проект Голос это простой граф. интерфейс  для festival
Re: dBus org.freedesktop.Notifications в QT C++
« Ответ #6 : 25 Июнь 2010, 23:24:32 »
Если ты прямо в коде пишешь кирилиу, то лучще убедиться что все исходники используют кодировку Utf-8 и использовать QString::fromUtf8() так как QString::fromLocal8Bit будет интерпретировать входную сишную строку как строку в кодировке текущей локали системы. Стоит ли говорить, что эта кодировка может быть разной даже на одной и той же операционной системе на одном и том же компе у разных пользователей.

Спасибо, я попробую. Сам сомневался по поводу fromLocal8Bit, решил что для dBus, который естественнен для linux и пока чужд для виндовс, сойдет. Пробывал кодеки использовать. Для приведенного кода этот метод не подошел, хотя в Qmessage под linux кириллица отобразилась, но уже в windows --- нет. Опробую предложенный fromUtf8(), т.к. в настройках проекта (QTCreater) использую Utf-8, а не system.

Попробовал в Windows - работает! Очень хорошо!!!
« Последнее редактирование: 28 Июнь 2010, 23:28:45 от GrandPeter »
Всё что не происходит - всё к лучшему!

 

Страница сгенерирована за 0.081 секунд. Запросов: 24.