c++ - Qt invokeMethod 和调用静态方法?

标签 c++ qt invoke

是否可以调用静态方法?

我正在使用:

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 参见what qt documented about it...

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:
};

关于c++ - Qt invokeMethod 和调用静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54746675/

相关文章:

c++ - GL_TEXTURE_CUBE_MAP 中具有不同分辨率的面孔

c++ - 在 C++ 中获取 std::map 的最大键的时间复杂度是多少?

c# - 使用 Invoke 方法从外部线程关闭窗体

error-handling - AWS Lambda : access the invocation parameters from error handler

scala - 调用匿名闭包

C++ 多线程 - 代码输出

c++ - 如何为 parallel_invoke 设置进度条?

linux - 如何创建运行自定义生成事件的 Makefile 或 .pro 文件

qt - 使用 'cmd' 命令的 QProcess 不会导致命令行窗口

c++ - 升级到 Xcode 8 后 GCC 5.4 链接器错误