QMetaObject::invokeMethod 使用方法
创始人
2024-05-29 22:41:02
0



QMetaObject::invokeMethod 是 Qt 中的一个静态函数,它可以在运行时动态地调用一个对象的成员函数

用于在线程之间调用某个对象的槽函数。它可以在不同线程之间调用槽函数,而不会引发死锁。

它的使用方式是:

  • QMetaObject::invokeMethod(obj, member, type, ret, val0, val1, …):这是最常用的一种形式,它接受以下参数:

    • obj:要调用成员函数的对象指针。
    • member:要调用的成员函数名,可以是信号、槽或普通函数,必须以 ‘\0’ 结尾。
    • type:指定连接类型,可以是 Qt::AutoConnection、Qt::DirectConnection、Qt::QueuedConnection 或 Qt::BlockingQueuedConnection。
    • ret:指定返回值类型和存储位置,使用 Q_RETURN_ARG 宏创建。
    • val0, val1,…:指定传递给成员函数的参数类型和值,使用 Q_ARG 宏创建。
  • QMetaObject::invokeMethod(obj, member, type):这是一种简化的形式,只有三个参数,表示调用没有返回值和参数的成员函数。

  • QMetaObject::invokeMethod(obj, member):这是一种更简化的形式,只有两个参数,表示调用没有返回值和参数的成员函数,并且使用默认的连接类型 Qt::AutoConnection。

示例如下:

QMetaObject::invokeMethod(object, "slotName", Qt::QueuedConnection, Q_ARG(int, arg1), Q_ARG(QString, arg2));

// 假设有一个类 C,定义了一个信号 sigC 和一个槽函数 slotCclass C : public QObject {Q_OBJECT
public:C(QObject *parent = nullptr) : QObject(parent) {}
signals:void sigC(int x); // 定义一个带有 int 参数的信号
public slots:int slotC(int y); // 定义一个带有 int 参数和返回值的槽函数
};// 在 main 函数中创建一个对象 c,并使用 invokeMethod 函数调用它int main(int argc, char *argv[]) {QApplication app(argc, argv);C c;// 使用第一种形式调用 c 的 slotC 槽函数,并传递 10 作为参数// 并将返回值存储在 result 变量中int result;QMetaObject::invokeMethod(&c,"slotC",Qt::DirectConnection,Q_RETURN_ARG(int,result),Q_ARG(int,10));// 使用第二种形式调用 c 的 sigC 信号,并传递 20 作为参数// 这相当于直接 emit c.sigC(20)QMetaObject::invokeMethod(&c,"sigC",Qt::DirectConnection,Q_ARG(int,20));// 使用第三种形式调用 c 的 slotC 槽函数,并传递 30 作为参数// 并将返回值存储在 result 变量中// 这相当于直接 result = c.slotC(30)int result;QMetaObject::invokeMethod(&c,"slotC",Q_RETURN_ARG(int,result),Q_ARG(int,30));return app.exec();
}

参考资料:

c++ - Why using QMetaObject::invokeMethod when executing method from thread - Stack Overflow

Qt信号槽调用方式(emit与QMetaObject::invokeMethod)_Scarlett_OHara的博客-CSDN博客

相关内容

热门资讯

粽子的来历与传说故事 粽子的来历与传说故事(通用7篇)  端午节马上要来了,说到端午节小编想到的就是粽子了,中国饮食文化是...
国庆趣事作文400字 国庆趣事作文400字(精选38篇)  在平日的学习、工作和生活里,许多人都有过写作文的经历,对作文都...
植树节的作文700字 【热门】植树节的作文700字汇编9篇  在日常学习、工作或生活中,许多人都有过写作文的经历,对作文都...
小学三年级作文 小学三年级作文(通用48篇)  在教学工作者开展教学活动前,通常会被要求编写,是备课向课堂教学转化的...
我的十一假期作文300字 我的十一假期作文300字  这个假期爸爸妈妈都很忙,但还是抽出了一天的时间和我去植物园。  清晨,我...
小学作文牵牛花 小学作文牵牛花  1牵牛花  每天早上,我在上学的路上,总看见一种花,在围墙上生长——牵牛花,又叫喇...
做手工作文 做手工作文做手工“六一”儿童节学校要举行“手工比一比”所以每个同学都要自己动手做。今天妈妈要准备把手...
春雨 春雨  “轰隆隆”一声闷雷,一阵春雨随之而来,这预示着美好的春天终于降临了。    “好雨知时节,当...
小猫吃鱼作文 小猫吃鱼作文(15篇)  在日常学习、工作和生活中,大家或多或少都会接触过作文吧,借助作文可以宣泄心...
小学五年级母爱的作文600字 【精选】小学五年级母爱的作文600字三篇  在平凡的学习、工作、生活中,大家都尝试过写作文吧,借助作...
环境描写的五个经典作文开头 环境描写的五个经典作文开头  自然环境是指自然界的景物,如季节变化、风霜雨雪、山川湖海、森林原野等。...
暑假打谷作文 暑假打谷作文  无论是在学校还是在社会中,大家都不可避免地会接触到作文吧,作文是从内部言语向外部言语...
一睁眼就碰到了快乐初一作文 一睁眼就碰到了快乐初一作文  在平日的学习、工作和生活里,许多人都写过作文吧,借助作文可以宣泄心中的...
学做春节美食作文 学做春节美食作文(精选11篇)  在日复一日的学习、工作或生活中,大家都经常看到作文的身影吧,作文可...
暑假里难忘的一件事 暑假里难忘的一件事暑假里难忘的一件事1夏汪政宇还记得那一次,我和哥哥一起去感受了夏.那天,有风,但分...
中秋节小学优秀作文 中秋节小学优秀作文(精选35篇)  在平时的学习、工作或生活中,说到作文,大家肯定都不陌生吧,作文是...
中秋节的由来和习俗 关于中秋节的由来和习俗  在平平淡淡的学习、工作、生活中,大家都有过中秋节的经历,对中秋节很是熟悉吧...
清明的优秀作文 清明节的优秀作文(精选6篇)  在学习、工作或生活中,大家都接触过作文吧,作文是一种言语活动,具有高...
感恩节的作文 【精华】感恩节的作文三篇  在现实生活或工作学习中,说到作文,大家肯定都不陌生吧,借助作文人们可以实...
对联和元宵的谜语 关于对联和元宵的谜语  元宵节这天上皓月高悬的夜晚,人们要点起彩灯万盏,以示庆贺。还有元宵谜语等着你...