如何将额外的变量传递给Qt插槽

hat*_*ack 4 c++ qt signals signals-slots

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

这是我的代码:

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

tux*_*ux3 9

如果你不想MYVARIABLE在你的类中声明,而是将它绑定到这个特定的信号/插槽连接,你可以使用Qt5的新的singal/slot语法将信号连接到C++ 11 lambda ,然后调用你的插槽与那个lambda.

例如,您可以写:

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

如果你不能使用C++ 11和Qt5的另一个解决方案是使用Qt的Property System将变量附加到你的QTimer*.这可以通过以下方式完成QObject::setProperty().

然后在插槽中,您可以使用QObject::sender()来获取QTimer*并阅读该属性QObject::property().

但是,请注意,这不是一个非常干净的解决方案,并且滥用财产制度.