在Qt 5.9中,我试图用C ++关键字代替SLOT。这是可能的(没有单独的方法)吗?
类似的东西:
QObject::connect(&timer, SIGNAL(timeout()), this, (delete image_ptr));
这不起作用,在我的代码示例下面:
QImage *image_ptr = new QImage(3, 3, QImage::Format_Indexed8);
QEventLoop evt;
QFutureWatcher<QString> watcher;
QTimer timer(this);
timer.setSingleShot(true);
QObject::connect(&watcher, &QFutureWatcher<QString>::finished, &evt, &QEventLoop::quit);
QObject::connect(&timer, SIGNAL(timeout()), &watcher, SLOT(cancel()));
QObject::connect(&timer, SIGNAL(timeout()), &evt, SLOT(quit));
QObject::connect(&timer, SIGNAL(timeout()), this, (delete image_ptr));
QFuture<QString> future = QtConcurrent::run(this,&myClass::myMethod,*image_ptr);
watcher.setFuture(future);
timer.start(100);
evt.exec();
答案 0 :(得分:3)
连接样本中的lambda表达式:
connect(
sender, &Sender::valueChanged,
[=]( const QString &newValue ) { receiver->updateValue( "senderValue", newValue ); }
);
答案 1 :(得分:1)
您可以使用lambda表达式(更多关于新的连接语法here)。
考虑到这些示例中的 receiver 是插槽的其他所有者(如果使用旧语法),它不是全局变量或宏。此外,使用lambdas时,您无法访问sender()
方法,因此您必须通过其他方法来访问它们。要解决这些情况,您必须在lambda中捕获这些变量。在你的情况下,它只是指针。
QObject::connect(&timer, &QTimer::timeout, [&image_ptr]() { delete image_ptr; });