使用QVariant调用Qt方法
Qt invoke method with QVariant
我有以下功能:
class TestClass: public QObject
{
Q_OBJECT
public:
Q_INVOKABLE QString test() { return QString("test"); }
};
我想调用测试方法,但得到的返回类型是QVariant,而不是QString。所以我尝试了这个:
TestClass obj;
QVariant returnedValue;
bool rslt= QMetaObject::invokeMethod(&obj, "test", Qt::DirectConnection,
Q_RETURN_ARG(QVariant, returnedValue)
);
QString strVar = returnedValue.toString();
但它不起作用,invoke返回false;
如果将返回类型获取为QString,它会起作用,但不幸的是,这对我来说不可用,因为我需要在调用函数之前知道返回类型。
QString r;
bool rslt= QMetaObject::invokeMethod(&obj, "test", Qt::DirectConnection,
Q_RETURN_ARG(QString, r)
);
您可以通过QMetaMethod::returnType()
检查方法返回类型,然后使用QGenericReturnArgument
构造返回值接收器。
以下是一些灵感的代码
这是我的工作示例
class TestClass: public QObject
{
Q_OBJECT
public:
Q_INVOKABLE MyStruct test() { return MyStruct(5); }
};
Q_DECLARE_METATYPE(MyStruct)
int ttr=qRegisterMetaType<MyStruct> ();
TestClass obj;
int thetype = QMetaType::type("MyStruct");
void *v = NULL;
QVariant returnedValue (thetype,v);
void* data = returnedValue.data();
bool rslt= QMetaObject::invokeMethod(&obj, "test", Qt::DirectConnection,
QGenericReturnArgument("MyStruct", data )
);
bool can = returnedValue.canConvert<MyStruct> ();
MyStruct structm = returnedValue.value<MyStruct>();
相关文章:
- Qt将信号与另一个类方法连接
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 清理"QSettings"注册表项的最佳方法(Windows上的Qt 5)
- Qt中的包装连接方法隐藏了编译器所需的信息
- 如何将函数指针传递给方法,以便它可以在Qt的connect()中使用?
- 在QT中为小部件添加彩色边框的最佳方法是什么
- 初始化和终止Qt应用程序的正确方法?
- 有没有一种方法可以忽略Qt c++中的文件名大小写敏感性?
- QT 替换子方法
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- 为什么Qt QString的替换方法会改变QString?
- 如何从qt中的类中调用方法
- Qt没有这样的方法插槽
- Qt 调用具有 1 个以上参数的 java 方法
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- C++/(Qt) 指向具有特定方法的任何对象的指针
- Qt/C++ - 从派生类调用重写方法
- 从另一个线程更新QT小部件的一种详细方法
- Qt cpp - 将QString写入文本文件的干净方法
- 指向类方法 QT 的指针向量