Russian Qt Forum
Ноябрь 22, 2024, 22:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу зарегистрировать объект в DBus  (Прочитано 2602 раз)
VicRul
Гость
« : Август 22, 2013, 11:08 »

Осваиваю DBus на Qt, пишу 2 консольных приложения: первое для ввода сообщения, а второе для получения этого сообщения. Первое не компилируется, пишет :

Код:
14:26:26: Выполняются этапы для проекта First...
14:26:26: Настройки не изменились, этап qmake пропускается.
14:26:26: Запускается: «/usr/bin/make»
g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIE -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I../../../Qt5.1.0/5.1.0/gcc/mkspecs/linux-g++ -I../First -I../../../Qt5.1.0/5.1.0/gcc/include -I../../../Qt5.1.0/5.1.0/gcc/include/QtDBus -I../../../Qt5.1.0/5.1.0/gcc/include/QtCore -I. -I. -o main.o ../First/main.cpp
../First/main.cpp: In function 'int main(int, char**)':
../First/main.cpp:19:34: error: no matching function for call to 'MessInterfaceAdaptor::MessInterfaceAdaptor(First&)'
../First/main.cpp:19:34: note: candidates are:
In file included from ../First/main.cpp:5:0:
../First/mess_adaptor.h:40:5: note: MessInterfaceAdaptor::MessInterfaceAdaptor(QObject*)
../First/mess_adaptor.h:40:5: note:   no known conversion for argument 1 from 'First' to 'QObject*'
../First/mess_adaptor.h:29:7: note: MessInterfaceAdaptor::MessInterfaceAdaptor(const MessInterfaceAdaptor&)
../First/mess_adaptor.h:29:7: note:   no known conversion for argument 1 from 'First' to 'const MessInterfaceAdaptor&'
../First/main.cpp:21:38: error: no matching function for call to 'QDBusConnection::registerObject(const char [6], First&)'
../First/main.cpp:21:38: note: candidate is:
In file included from ../../../Qt5.1.0/5.1.0/gcc/include/QtDBus/qdbusabstractinterface.h:52:0,
                 from ../../../Qt5.1.0/5.1.0/gcc/include/QtDBus/QtDBus:5,
                 from ../First/main.cpp:4:
../../../Qt5.1.0/5.1.0/gcc/include/QtDBus/qdbusconnection.h:168:10: note: bool QDBusConnection::registerObject(const QString&, QObject*, QDBusConnection::RegisterOptions)
../../../Qt5.1.0/5.1.0/gcc/include/QtDBus/qdbusconnection.h:168:10: note:   no known conversion for argument 2 from 'First' to 'QObject*'
make: *** [main.o] Error 1
14:26:30: Процесс «/usr/bin/make» завершился с кодом 2.
Ошибка при сборке/установке проекта First (комплект: Desktop Qt 5.1.0 GCC 32bit)
Во время выполнения этапа «Сборка»
14:26:30: Прошло времени: 00:04.

Код First.h
Код:
#ifndef FIRST_H
#define FIRST_H

#include <iostream>
#include <QObject>

using namespace std;

class First: public QObject
{
    Q_OBJECT
public:
    First(string);

public Q_SLOTS:
    void Str(string);
    string get_str();

private:
    string strok;
};

#endif // FIRST_H

First.cpp
Код:
#include "First.h"
#include <iostream>

using namespace std;

First::First(string First::strok)
{
    First::Str(First::sstrok);
}

void First::Str(string str)
{
    First::strok=str;
}

string First::get_str()
{
    return First::strok;
}

Main.cpp
Код:
#include <QCoreApplication>
#include "First.h"
#include <iostream>
#include <QtDBus/QtDBus>
#include "mess_adaptor.h"
using namespace std;

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

    string strok;

    cout << "Eter the word and press 'ENTER':\n";
    getline(cin, strok);

    First *fir = new First(strok);

    new MessInterfaceAdaptor(*fir);
    QDBusConnection conn = QDBusConnection::sessionBus();
    conn.registerObject("/Mess", *fir);
    conn.registerService("org.Message");

    delete fir;
}


Так-же создал Mess.xml
Код:
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.MessInterface">
<method name="Str"/>
<method name="get_str"/>
</interface>
</node>

И с помощью терминала сгенерил mess_adaptor.h
Код:
/*
 * This file was generated by qdbusxml2cpp version 0.8
 * Command line was: qdbusxml2cpp -a mess_adaptor.h: Mess.xml
 *
 * qdbusxml2cpp is Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
 *
 * This is an auto-generated file.
 * This file may have been hand-edited. Look for HAND-EDIT comments
 * before re-generating it.
 */

#ifndef MESS_ADAPTOR_H_1377155979
#define MESS_ADAPTOR_H_1377155979

#include <QtCore/QObject>
#include <QtDBus/QtDBus>
QT_BEGIN_NAMESPACE
class QByteArray;
template<class T> class QList;
template<class Key, class Value> class QMap;
class QString;
class QStringList;
class QVariant;
QT_END_NAMESPACE

/*
 * Adaptor class for interface org.MessInterface
 */
class MessInterfaceAdaptor: public QDBusAbstractAdaptor
{
    Q_OBJECT
    Q_CLASSINFO("D-Bus Interface", "org.MessInterface")
    Q_CLASSINFO("D-Bus Introspection", ""
"  <interface name=\"org.MessInterface\">\n"
"    <method name=\"Str\"/>\n"
"    <method name=\"get_str\"/>\n"
"  </interface>\n"
        "")
public:
    MessInterfaceAdaptor(QObject *parent);
    virtual ~MessInterfaceAdaptor();

public: // PROPERTIES
public Q_SLOTS: // METHODS
    void Str();
    void get_str();
Q_SIGNALS: // SIGNALS
};

#endif

Пожалуйста, подскажите, что делаю не так..
Записан
mutineer
Гость
« Ответ #1 : Август 22, 2013, 11:20 »

Код
C++ (Qt)
new MessInterfaceAdaptor(*fir);
...
conn.registerObject("/Mess", *fir);
 

Звездочка лишняя


Ну и в догонку:
твой код ничего осмысленного не сделает, потому что после регистрации в DBus идет удаление fir и выход
« Последнее редактирование: Август 22, 2013, 11:28 от mutineer » Записан
VicRul
Гость
« Ответ #2 : Август 22, 2013, 12:08 »

Спасибо большое, заработало.

Цитировать
Ну и в догонку:
твой код ничего осмысленного не сделает, потому что после регистрации в DBus идет удаление fir и выход

Только подтереть строчку delete fir?
Записан
mutineer
Гость
« Ответ #3 : Август 22, 2013, 12:09 »

Ну тогда прога завершится без удаления fir
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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