我想知道如何将单独的变量传递到插槽中。 我似乎无法让它工作。有什么方法可以解决这个问题吗?
这是我的代码:
QTimer * timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(method(MYVARIABLE)));
timer->start(4000);
答案 0 :(得分:9)
如果您不想在类中声明MYVARIABLE
,而是将其绑定到此特定信号/插槽连接,则可以使用{将信号连接到C ++ 11 lambda {3}}然后用那个lambda调用你的插槽。
例如你可以写:
QTimer * timer = new QTimer();
connect(timer, &QTimer::timeout, [=]() {
method(MYVARIABLE);
});
timer->start(4000);
如果您不能使用C ++ 11和Qt5,则另一种解决方案是使用Qt5's new singal/slot syntax将变量附加到QTimer*
。这可以使用Qt's Property System完成。
然后在广告位中,您可以使用QObject::setProperty()
获取QTimer*
并使用QObject::sender()
重新阅读该媒体资源。
然而,请注意,这不是一个非常干净的解决方案,并且滥用财产制度。
答案 1 :(得分:2)
来自http://doc.qt.io/qt-5/signalsandslots.html
关于是否在SIGNAL()和中包含参数的规则 SLOT()宏,如果参数有默认值,则是 传递给SIGNAL()宏的签名必须没有更少的参数 而不是传递给SLOT()宏的签名。
你可以试试这个
QTimer * timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(methodSlot()));
timer->start(4000);
methodSlot()
{
method(MYVARIABLE);
}