在主线程中如果执行比较耗时的任务,但是又不想单独开子线程来处理,不妨试试Qt中提供QMetaObject::invokeMethod方法,该方法支持函数的异步调用,这样就会在界面显示后去执行,而不会卡主主界面
QMetaObject::invokeMethod(this, "MyMethod", Qt::QueuedConnection);
这里MyMethod就是被调用的函数名,如果MyMethod带参数且有返回值,如下所示
QString retVal;
QMetaObject::invokeMethod(obj, "MyMethod", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "sqrt"),
Q_ARG(int, 42),
&n