yan*_*nce 16 c++ qt qtconcurrent
我似乎无法QtConcurrent::run()仅使用简单的函数与方法(类的函数成员)关联.我怎样才能做到这一点?
使用常规功能,我无法发出信号和拖拽.为什么有人会发现这是一个更好的替代品QThread超出我的想法,并希望得到一些投入.
Kyl*_*utz 19
是的,这是可能的(而且非常简单).
这是一个例子(来自Qt文档):
// call 'QStringList QString::split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const' in a separate thread
QString string = ...;
QFuture<QStringList> future = QtConcurrent::run(string, &QString::split, QString(", "), QString::KeepEmptyParts, Qt::CaseSensitive);
...
QStringList result = future.result();
Run Code Online (Sandbox Code Playgroud)
基本上,您所要做的就是将指向对象的指针作为第一个参数传递,将方法的地址作为第二个参数传递(后跟任何其他参数).
请参阅:https://doc.qt.io/qt-5/qtconcurrentrun.html
问题是当你使用指向成员函数的指针时,你还需要以某种方式提供this参数(即,应该调用成员函数的对象).
如果您以前没有使用它,那么这个语法非常困难.阅读http://www.parashift.com/c++-faq-lite/pointers-to-members.html可能会有所帮助.
假设你有一个类Dog和一个函数Dog::walkTheDog(int howlong_minutes).然后你应该能够使用std::bind1st并std::mem_fun使其适合QtConcurrent::run:
Dog dog;
// Walk this dog for 30 minutes
QtConcurrent::run(std::bind1st(std::mem_fun(&Dog::walkTheDog), &dog), 30);
Run Code Online (Sandbox Code Playgroud)
std::bind1st(std::mem_fun(&Dog::walkTheDog), &dog)返回一个类似函数的对象,它将成员函数绑定到特定的dog.从那时起,您就可以像使用独立功能一样使用它.