【发布时间】:2020-10-12 03:48:42
【问题描述】:
我想要实现的目标是发出一个信号,但在实际发出之前将其延迟一段时间。
我的想法是这样的:
emitLater(QObject *obj, QEvent *event, int msDelay)
{
QTimer...
connect(timout to obj and event...
start timer with msDelay...
//maybe I might need a public timer of some sort but the idea is clear
}
因此,此方法因QEvent 参数而失败,因为信号无法转换为QEvents。
我尝试使用 std::bind 调用几个变体,但我无法让它工作:
//the call
std::function<void(void)> signal = std::bind(&CustomPushButton_Header::clicked, &uiWindow->btnHeader_left); //just a random button to connect a valid signal
emitLater(signal, 2000);
//the function
emitLater(std::function<void(void)>, int msDelay)
{
qDebug() << "hi";
}
我希望有一个适用于所有对象和所有信号的解决方案......也许只是调用该函数的部分。我认为延迟会很容易。
或者你有一个不同的甚至更简单的方法。那就太好了。
我查看的一些来源:
【问题讨论】:
-
您能否编辑您的问题以提供更完整的用例来显示您想要实现的目标。特别是,显示的代码似乎重用了
QEvent,这将不起作用,因为当控制返回事件循环时,QEvent将被删除。不过一般来说,如果你有一个函子f,你想从现在开始调用ms毫秒,你可以使用QTimer::singleShot(ms, f)。 -
哦,是的,这就是我一直在寻找的 :) 谢谢伙计,我现在很开心。您也可以发布解决方案:)
标签: qt parameters signals