我的应用程序中有一个QListQGenericArgument(用于实现我的事件处理程序类)。在一种特定情况下,我需要提取一个参数的值来进行一些检查。我知道类型。所以我这样写:

template <class T>
T GetQArgumentValue(QGenericArgument &arg)
{
    const unsigned char* data = reinterpret_cast<const unsigned char*>(arg.data());
    return (T) *data;
}


像这样使用:

QGenericArgument arg = Q_ARG(int, 30); // this is obviously an example, I get this from an array in real code
int value = GetQArgumentValue<int>(arg);


它运作良好。所以我的问题是:

1)由于它是内部帮助程序类,因此在我的应用程序中使用它会有任何问题吗?

2)是否有内置函数可以执行此操作?与重新发明轮子相比,我更喜欢内置轮子。

编辑:

我想要的是:

假设我有:

QGenericArgument arg = Q_ARG(int, 30);


我想找回30值:

int v = magic_function<int>(arg); // v = 30

最佳答案

在Qt文档中,建议不要以QGenericArgument创建Q_ARG的任何方式使用QMetaObject::invokeMethod()传递给QGenericArgument。原因是类void*实际上是一对两个指针(类成员):const char*用于数据,而QVariant用于名称。

它将起作用。但是,它类似于空指针列表,并且以相同的方式也是不好的。

如果将这样的列表传递给任何函数,则应注意这些对象的寿命:这些指针所指向的原始对象应在足够长的时间内仍然有效,并且在破坏此类对象时也很棘手。

如果需要在将参数传递给QMetaMethod之前管理一些动态参数列表,则对这些参数使用一些包装器会更安全更好。例如,Qt中有一个类QList。因此,此处可以使用QVariantQVariantMap中的。

关于c++ - 我如何获得QGenericArgument的值(value)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32553333/

10-11 03:53