gpt4 book ai didi

c++ - 没有 SLOT 宏的 Qt 连接

转载 作者:太空狗 更新时间:2023-10-29 21:00:03 24 4
gpt4 key购买 nike

假设我有一个包含“function()”的字符串,其中 function() 是类中的一个槽,我想将该槽与任何信号连接,但使用该字符串。都没有

QString f="function()";
connect (randomobject, SIGNAL(randomsignal()), this, SLOT(f));

output: just says that slot f doesn't exist.

QString f="SLOT(function())";
//conversion to const char*
connect (randomobject, SIGNAL(randomsignal()), this, f);
output: Use the SLOT or SIGNAL macro to connect

工作。

有没有办法做类似的事情?重要的是它是一个字符串而不是一个函数指针。

最佳答案

您可以在 qobjectdefs.h 中查看 SLOT 的定义:

#ifndef QT_NO_DEBUG
# define SLOT(a) qFlagLocation("1"#a QLOCATION)
# define SIGNAL(a) qFlagLocation("2"#a QLOCATION)
#else
# define SLOT(a) "1"#a
# define SIGNAL(a) "2"#a
#endif

这意味着 SLOT("func()") 在预处理后简单地转换为 "1func()"。所以你可以这样写:

Test *t = new Test; // 'Test' class has slot void func()
QString str = "func()";

QPushButton *b = new QPushButton("pressme");
QObject::connect(b, SIGNAL(clicked()), t, QString("1" + str).toLatin1()); // toLatin1 converts QString to QByteArray

当您显示按钮并按下它时,将调用 Test 中的插槽 func()。

请注意,“connect”将“const char *”作为第二和第四个参数类型,因此您必须将 QString 转换为“const char *”或“QByteArray”(将被转换为 char 指针)。

关于c++ - 没有 SLOT 宏的 Qt 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23159810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com