gpt4 book ai didi

c++ - 如何获得 QGenericArgument 的值(value)?

转载 作者:行者123 更新时间:2023-11-28 00:11:55 25 4
gpt4 key购买 nike

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

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值(value)返回:

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

最佳答案

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

它会起作用的。但是,它类似于空指针列表,同样也有不好的地方。

如果您将此类列表传递给任何函数,您应该注意这些对象的生命周期:这些指针指向的原始对象应该在足够长的时间内仍然有效,而且销毁此类对象也很棘手。

如果您需要在将参数传递给 QMetaMethod 之前管理一些动态参数列表,那么为这些参数使用一些包装器会更安全、更好。例如,类 QVariant在Qt。所以,这里可以使用QVariantQList或者QVariantMap

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com