Добавьте QObject в основной цикл QT для получения сообщений dbus

У меня есть консольное приложение Qt. В этом приложении есть объект типа «my_client». У объектов «my_client» есть слот с именем «messageSlot». Этот слот подключен к сообщению DBUS.

Итак, основная функция этого приложения qt следующая:

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

if (!QDBusConnection::sessionBus().isConnected())
{
fprintf(stderr, "Cannot connect to the D-Bus session bus.\n""To start it, run:\n""\teval `dbus-launch --auto-syntax`\n");
return 1;
}

if (!QDBusConnection::sessionBus().registerService("org.brlapi.server"))
{
fprintf(stderr, "%s\n",
qPrintable(QDBusConnection::sessionBus().lastError().message()));
std::cout << qPrintable(QDBusConnection::sessionBus().lastError().message())
<< std::endl;
exit(1);
}
my_client client;
new myClassAdaptor(&client);
QDBusConnection::sessionBus().registerObject("/", &client);

QDBusConnection::sessionBus().connect("org.my.server",
"/",
"org.my.server",
"message",
&client,
SLOT(my_client::messageSlot(QString, QString)));

return a.exec();
}

И my_client выглядит следующим образом:

class my_client : public QObject
{
Q_OBJECT

public:
my_client()
{

}

private slots:
void messageSlot(QString msg1, QString msg2)
{
std::cout << "CLIENT : I've received a message : " << msg1.toStdString()
<< "," << msg2.toStdString() << std::endl;
QDBusMessage msg = QDBusMessage::createSignal("/", "org.my.server", "message");
msg << "Hello!!!" << "Are you ok?";
QDBusConnection::sessionBus().send(msg);
}
};

Но с этим кодом я не могу получить сообщение DBUS. Я думаю, что проблема в том, что клиентский объект не имеет основного цикла и поэтому не может принимать сигналы.

Я прав? Если так, как мы можем добавить клиентский объект в основной цикл? и если нет, то в чем проблема с этим кодом? как я могу получать сообщения dbus и обрабатывать их с помощью сигнала / слота QT?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]