• Qt QMetaObject::invokeMethod


    是什么:

            invokeMethod 是Qt元对象系统中的一个函数,用于程序运行时动态的调用对象的槽函数或者静态函数


    适用背景:

    1. 动态调用:允许程序运行时动态的调用对象的函数,而并不需要提前知道函数的具体名称。这对于一些需要根据运行时条件来决定调用哪个函数的场景非常有用。
    2. 跨线程调用:可以在不同线程之间进行函数调用,它会自动处理线程之间的切换和参数传递,确保函数在正确的线程中运行。这对于在多线程应用程序中进行线程间通信非常有用。
    3. 信号槽机制:信号槽的机制来源于此。

    函数原型:

    bool QMetaObject::invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument(), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument())

    1. obj:要调用函数的对象指针。
    2. member:要调用的函数名,以字符串形式表示。
    3. type:连接类型,用于指定函数的调用方式。
    4. ret:返回值类型,用于指定函数的返回值类型。
    5. val0 ~ val9:函数的参数列表。

    测试使用:

    1. #include
    2. #include
    3. #include
    4. class MyClass : public QObject
    5. {
    6. Q_OBJECT
    7. public slots:
    8. void mySlot(int value)
    9. {
    10. qDebug() << "Received value:" << value;
    11. }
    12. };
    13. int main(int argc, char *argv[])
    14. {
    15. QCoreApplication a(argc, argv);
    16. MyClass obj;
    17. int value = 88;
    18. QMetaObject::invokeMethod(&obj, "mySlot", Qt::AutoConnection, Q_ARG(int, value));
    19. return a.exec();
    20. }

            测试中,使用 QMetaObject::invokeMethod 函数来调用 obj 对象的 mySlot 槽函数,并传递 value 作为参数。当程序运行时,mySlot 槽函数会被调用,并输出 “Received value: 88” 的信息。

            注意!使用 QMetaObject::invokeMethod 函数时,需要确保对象的元对象信息已经注册,即对象所在的类需要使用 Q_OBJECT 宏进行声明。

  • 相关阅读:
    docker安装开发常用软件MySQL,Redis,rabbitMQ
    测试平台系列(91) 编写oss管理页面
    【ajax跨域问题解决之jsonp】
    探索Python中的装饰器
    oracle数据库的导入与导出
    【深入理解Linux内核锁】六、信号量
    Prophet模型的简介以及案例分析
    Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业
    云原生之使用Docker部署BookBrowser电子书浏览器
    【日常】一名开发人员总结的好习惯,欢迎补充
  • 原文地址:https://blog.csdn.net/baidu_33879812/article/details/134013452