[英]Qt invokeMethod and calling a static method?
可以調用靜態方法嗎?
我在用:
QMetaObject::invokeMethod(this
,strThread.toLatin1()
,Qt::DirectionConnection
,Q_ARG(clsThread*, this));
這可行,但是我想調用靜態方法,但不可行,是否可以調用靜態方法?
我試過分配給strThread:“ clsScriptHelper::threadFun"
,但這是行不通的。
我無法使用靜態方法,因此我實現了替代解決方案。 在派生線程類中,我添加了一個具有以下類型的成員:
QObject* mpobjClass;
然后,我添加了一種設置方法:
void setClassPtr(QObject * pobjClass){mpobjClass = pobjClass; }
我的調用現在看起來像這樣:
QMetaObject::invokeMethod(mpobjClass
,strThread.toLatin1()
,Qt::DirectConnection
,Q_ARG(clsThread*, this));
這對我有用。
是的,可以,但是該方法必須被注釋為可調用的,即Q_INVOKABLE
參見qt關於它的記錄...
Foo obj;
QMetaObject::invokeMethod(&obj, "amSomething", Qt::DirectConnection);
和Foo應該看起來像:
class Foo : public QObject
{
Q_OBJECT
public:
explicit Foo(QObject *parent = nullptr);
Q_INVOKABLE static void amSomething(){ qDebug() << "am in static";}
signals:
public slots:
};
為什么要這么做? invokeMethod
用於當對象具有動態類型並且您有一個實例並且想要對該實例調用方法時,盡管對該類型一無所知。
您似乎想要做的是基於字符串名稱調度靜態方法。 這並不難,不需要invokeMethod
:
class Class {
public:
static void method1();
static void method2();
static void dispatchByName(const char *name) {
if (QByteArrayLiteral("method1") == name) method1();
else if (QByteArrayLiteral("method2") == name) method2();
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.