直接上例子:
QProcess* process = new QProcess;
process->setProgram("cmd");
QStringList argument;
argument<<"/c"<< QString::fromStdString(strCmd);
process->setArguments(argument);
qDebug() << "argument:" << argument;
QObject::connect(process, &QProcess::finished),this,[this](int){
std::cout << "process finished." << std::endl;
});
错误提示:
error: C2664: “QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”
: 无法将参数 2 从“overloaded-function”
问题分析:
Q_SIGNALS:
void started(QPrivateSignal);
#if QT_DEPRECATED_SINCE(5, 13)
QT_DEPRECATED_X("Use QProcess::finished(int, QProcess::ExitStatus) instead")
void finished(int exitCode); // ### Qt 6: merge the two signals with a default value
#endif
void finished(int exitCode, QProcess::ExitStatus exitStatus);
// 以上为源码部分,我们可以看到finished信号是有重载的,存在两个同名函数
解决方法如下:
QProcess* process = new QProcess;
process->setProgram("cmd");
QStringList argument;
argument<<"/c"<< QString::fromStdString(strCmd);
process->setArguments(argument);
qDebug() << "argument:" << argument;
QObject::connect(process, static_cast<void(QProcess::*)(int)>(&QProcess::finished),this,[this](int){
std::cout << "process finished." << std::endl;
});