c++ - 如何将额外变量传递给 Qt 插槽

标签 c++ qt signals signals-slots

我想知道如何将一个单独的变量传递到一个插槽中。 我似乎无法让它工作。有什么办法解决这个问题吗?

这是我的代码:

QTimer * timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(method(MYVARIABLE)));
timer->start(4000);

最佳答案

如果您不想在您的类中声明 MYVARIABLE,而是将其绑定(bind)到这个特定的信号/槽连接,您可以将信号连接到 C++11 lambda,使用Qt5's new singal/slot syntax然后用那个 lambda 调用你的插槽。

例如你可以这样写:

QTimer * timer = new QTimer();
connect(timer, &QTimer::timeout, [=]() {
     method(MYVARIABLE);
});
timer->start(4000);

如果不能使用 C++11 和 Qt5,另一种解决方案是使用 Qt's Property System将变量附加到您的 QTimer*。这可以通过 QObject::setProperty() 来完成.

然后在槽中你可以使用QObject::sender()获取您的 QTimer* 并使用 QObject::property() 读取属性.

但是,请注意,这不是一个非常干净的解决方案,并且属于对属性系统的滥用。

关于c++ - 如何将额外变量传递给 Qt 插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676840/

相关文章:

c++ - cmake .exe 和终端命令之间的 ROOT 结果不匹配

c++ - qSort() 不适用于自己的比较函数

c++ - QT画多条线

java - JVM 信号链 SIGPIPE

macos - 如何让lldb忽略EXC_BAD_ACCESS异常?

c++ - 为模板类使用别名

c++ - 类实例成员初始化

c++ - 将具有固定签名的自定义函数名称注入(inject) CRTP

c++ - 在 extern c 中编写 C++ 代码

c++ - 使用 libpcap 中断捕获的问题