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)
如果你不想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().
但是,请注意,这不是一个非常干净的解决方案,并且滥用财产制度.