我的应用程序中有一个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
值:int v = magic_function<int>(arg); // v = 30
最佳答案
在Qt文档中,建议不要以QGenericArgument
创建Q_ARG
的任何方式使用QMetaObject::invokeMethod()
传递给QGenericArgument
。原因是类void*
实际上是一对两个指针(类成员):const char*
用于数据,而QVariant
用于名称。
它将起作用。但是,它类似于空指针列表,并且以相同的方式也是不好的。
如果将这样的列表传递给任何函数,则应注意这些对象的寿命:这些指针所指向的原始对象应在足够长的时间内仍然有效,并且在破坏此类对象时也很棘手。
如果需要在将参数传递给QMetaMethod之前管理一些动态参数列表,则对这些参数使用一些包装器会更安全更好。例如,Qt中有一个类QList
。因此,此处可以使用QVariant
或QVariantMap
中的。
关于c++ - 我如何获得QGenericArgument的值(value)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32553333/