Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
qdbus和自定义类型的编组 我想通过Qt DUS API发送自定义C++类。我已经使用protoc编译器从.proto文件创建了这个类,并将它们添加到我在QtCreator中的项目中。现在我想验证是否可以通过DBUSAPI将自定义类作为QVariant发送。我有一个接收器和发送器程序,可以发送一个简单的测试字符串,以便Dbus工作。在将协议缓冲区类添加为元类型后,我无法发送它_Qt_Qt4_Protocol Buffers_Qtembedded_Qdbus - Fatal编程技术网

qdbus和自定义类型的编组 我想通过Qt DUS API发送自定义C++类。我已经使用protoc编译器从.proto文件创建了这个类,并将它们添加到我在QtCreator中的项目中。现在我想验证是否可以通过DBUSAPI将自定义类作为QVariant发送。我有一个接收器和发送器程序,可以发送一个简单的测试字符串,以便Dbus工作。在将协议缓冲区类添加为元类型后,我无法发送它

qdbus和自定义类型的编组 我想通过Qt DUS API发送自定义C++类。我已经使用protoc编译器从.proto文件创建了这个类,并将它们添加到我在QtCreator中的项目中。现在我想验证是否可以通过DBUSAPI将自定义类作为QVariant发送。我有一个接收器和发送器程序,可以发送一个简单的测试字符串,以便Dbus工作。在将协议缓冲区类添加为元类型后,我无法发送它,qt,qt4,protocol-buffers,qtembedded,qdbus,Qt,Qt4,Protocol Buffers,Qtembedded,Qdbus,我的test.proto文件只包含int: message MyData { required int32 name = 1; required int32 id = 2; optional int32 email = 3; } 在我添加的协议缓冲区类头文件中: #include <QMetaType> #include <QDBusMetaType> ... friend QDBusArgument &operator<<(QDBusA

我的test.proto文件只包含int:

message MyData {
  required int32 name = 1;
  required int32 id = 2;
  optional int32 email = 3;
}
在我添加的协议缓冲区类头文件中:

#include <QMetaType>
#include <QDBusMetaType>
...
friend QDBusArgument &operator<<(QDBusArgument &argument, const MyData &dataToWrite);
friend const QDBusArgument &operator>>(const QDBusArgument &argument, MyData &dataToWrite);
...
Q_DECLARE_METATYPE(MyData )
#include <QDebug>
...
#include <QMetaType>
#include <QDBusMetaType>

// Marshall the MyData data into a D-Bus argument
QDBusArgument &operator<<(QDBusArgument &argument, const MyData &dataToWrite)
{

    qDebug() << "OPERATOR<<";

    argument.beginStructure();

    // Break out the various properties of dataToWrite protocol buffer
    int name = dataToWrite.name();
    int id = dataToWrite.id();
    int email = dataToWrite.email();
    qDebug() << name;
    qDebug() << id;
    qDebug() << email;

    argument << name;
    argument << id;
    argument << email;
    argument.endStructure();
    return argument;

}

// Retrieve the MyData data from the D-Bus argument
const QDBusArgument &operator>>(const QDBusArgument &argument, MyData &dataToWrite)
{

    qDebug() << "OPERATOR>>";

    argument.beginStructure();

    // Break out the various properties of dataToWrite protocol buffer
    int name = dataToWrite.name();
    int id = dataToWrite.id();
    int email = dataToWrite.email();
    qDebug() << name;
    qDebug() << id;
    qDebug() << email;

    argument >> name;
    argument >> id;
    argument >> email;
    argument.endStructure();
    return argument;

}
#包括
#包括
...
friend QDBusArgument和运算符(常量QDBusArgument和argument,MyData和dataToWrite);
...
Q_DECLARE_元类型(MyData)
在我添加的协议缓冲区类实现文件中:

#include <QMetaType>
#include <QDBusMetaType>
...
friend QDBusArgument &operator<<(QDBusArgument &argument, const MyData &dataToWrite);
friend const QDBusArgument &operator>>(const QDBusArgument &argument, MyData &dataToWrite);
...
Q_DECLARE_METATYPE(MyData )
#include <QDebug>
...
#include <QMetaType>
#include <QDBusMetaType>

// Marshall the MyData data into a D-Bus argument
QDBusArgument &operator<<(QDBusArgument &argument, const MyData &dataToWrite)
{

    qDebug() << "OPERATOR<<";

    argument.beginStructure();

    // Break out the various properties of dataToWrite protocol buffer
    int name = dataToWrite.name();
    int id = dataToWrite.id();
    int email = dataToWrite.email();
    qDebug() << name;
    qDebug() << id;
    qDebug() << email;

    argument << name;
    argument << id;
    argument << email;
    argument.endStructure();
    return argument;

}

// Retrieve the MyData data from the D-Bus argument
const QDBusArgument &operator>>(const QDBusArgument &argument, MyData &dataToWrite)
{

    qDebug() << "OPERATOR>>";

    argument.beginStructure();

    // Break out the various properties of dataToWrite protocol buffer
    int name = dataToWrite.name();
    int id = dataToWrite.id();
    int email = dataToWrite.email();
    qDebug() << name;
    qDebug() << id;
    qDebug() << email;

    argument >> name;
    argument >> id;
    argument >> email;
    argument.endStructure();
    return argument;

}
#包括
...
#包括
#包括
//将MyData数据整理成D-Bus参数

QDBusArgument&operator要实现此功能,请执行如下操作:

// PROTOBUF-MODIFICATION-DBUS
// Marshall the companyData data into a D-Bus argument
QDBusArgument &operator<<(QDBusArgument &argument, const companyData &dataToWrite)
{

    argument.beginStructure();

    // Break out the various properties of dataToWrite protocol buffer
    int name = dataToWrite.name();
    int id = dataToWrite.id();
    int email = dataToWrite.email();
    argument << name;
    argument << id;
    argument << email;
    argument.endStructure();
    return argument;

}

// PROTOBUF-MODIFICATION-DBUS
// Retrieve the companyData data from the D-Bus argument
const QDBusArgument &operator>>(const QDBusArgument &argument, companyData &dataToWrite)
{

    int name, id, email;

    argument.beginStructure();
    argument >> name;
    argument >> id;
    argument >> email;
    argument.endStructure();
    dataToWrite.set_name(name);
    dataToWrite.set_id(id);
    dataToWrite.set_email(email);
    return argument;

}
//PROTOBUF-MODIFICATION-DBUS
//将companyData数据整理成D-Bus参数
QDBusArgument&operator>id;
论点>>电子邮件;
argument.endStructure();
dataToWrite.set_name(名称);
dataToWrite.set_id(id);
dataToWrite.set_电子邮件(email);
返回参数;
}

我也看到了同样的情况,客户机调用了两次编组。在服务器端,首先调用编组,然后调用解编组。我也很困惑。我也提出了一个问题-。你运气好吗?为什么会这样?但有趣的是,我的代码运行良好。
Sending  2 
Sending  3 
Sending  4 
OPERATOR<< 
0 
0 
0 
OPERATOR<< 
2 
3 
4 
Command:   Contacting Protobuf Receiver and calling WRITENVRAM...
Response:   HELLO CLASS
OPERATOR<< 
0 
0 
0 
OPERATOR>> 
0 
0 
0 
WRITE NVRAM COMMAND CALLED 
Unpacking:  0 
Unpacking:  0 
Unpacking:  0
// PROTOBUF-MODIFICATION-DBUS
// Marshall the companyData data into a D-Bus argument
QDBusArgument &operator<<(QDBusArgument &argument, const companyData &dataToWrite)
{

    argument.beginStructure();

    // Break out the various properties of dataToWrite protocol buffer
    int name = dataToWrite.name();
    int id = dataToWrite.id();
    int email = dataToWrite.email();
    argument << name;
    argument << id;
    argument << email;
    argument.endStructure();
    return argument;

}

// PROTOBUF-MODIFICATION-DBUS
// Retrieve the companyData data from the D-Bus argument
const QDBusArgument &operator>>(const QDBusArgument &argument, companyData &dataToWrite)
{

    int name, id, email;

    argument.beginStructure();
    argument >> name;
    argument >> id;
    argument >> email;
    argument.endStructure();
    dataToWrite.set_name(name);
    dataToWrite.set_id(id);
    dataToWrite.set_email(email);
    return argument;

}