如何传递一个QT对象作为参数

CORBA : How to pass a QT object as a parameter

本文关键字:对象 QT 参数 一个 何传递      更新时间:2023-10-16

我是CORBA的新手,正在尝试为我的QT应用程序创建CORBA接口。我检查了可以与CORBA一起使用的数据类型,但我不确定是否可以将QT对象用作CORBA函数中的参数。我想传递的是QWSPointerCalibrationData。假设我有一个CORBA服务器代码:

//pass data.screenPoints and data.devPoints
CORBA::Boolean Calibrate( QWSPointerCalibrationData data )
{
  ...
}
  • 这可能吗?
  • 如果是,如何在IDL文件中声明?
  • 如果没有,我可以使用什么CORBA数据类型来传递这些类型的数据?

因为您有代码,所以这是不可能的。您必须指定与您在应用程序中使用的类型相等的IDL类型,并且还提供(唉,是的)CORBA IDL中定义的类型与您的应用程序中定义的类型之间的转换函数。作为一个优势,您可以使应用程序对通信(或RPC)技术的未来变化视而不见,因为您在内部使用自己的类型。在本例中,查看文档,QWSPointerCalibrationData类型有两个数据成员:

QPoint  devPoints[5] 
QPoint  screenPoints[5]

然后您应该在IDL中首先声明QPoint类型,然后声明QWSPointerCalibrationData(我在名称前加上C_以表示CORBA类型):

// IDL
struct C_Point { long x; long y; };
typedef sequence<C_Point> Points;
struct C_WSPointerCalibrationData
{
    Points devPoints;
    Points screenPoints;
};
那么,你的服务器方法必须是:
CORBA::Boolean Calibrate( C_QWSPointerCalibrationData const& data )
{
    QWSPointerCalibrationData qpcd = convert_from_CORBA_QWSPointerCalibrationData(data);
    // use qpcd as usual here
}

您必须自己编写convert_from_CORBA_QWSPointerCalibrationData函数(以及将该类型转换为CORBA对应类型的相应函数)。有一些工具可以完成这种转换,但是,很遗憾,这是必须完成的。