环境:
Qt5.10.1;Qt quick程序;qml与C++交互
问题:
1.error: ‘QMutex’ does not name a type:QMutex mutex;
原因:没有包含相应的类
解决方案:添加:#include <QMutex>
2.TypeError: Property 'setMutex' of object xxxProcessor(0x117dae0) is not a function
原来代码:
Connections{
target: xxxProcessor
onOutputSentenceChanged:{
xxxProcessor.setMutex(0);
}
}
解决方案:将代码更改为一下代码
Connections{
target: xxxProcessor
onOutputSentenceChanged:{
xxxProcessor.mutex=0;
}
}
3.QQmlApplicationEngine failed to load component 。Incorrectly specified signal assignment
原来代码:Make是用C++写的一个类。Make类被注册为qml类型。以下代码是在xxx.qml文件中的含有bug的代码段
Make{
onOutputSentenceChanged{
}
}
解决方案:将代码更改为一下代码:
Make{
onOutputSentenceChanged:{
}
}
4.-1: error: collect2: error: ld returned 1 exit status
相应的编译输出:
moc_xxx.o:在函数‘XXX::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)’中: ..../moc_xxx.cpp:84:对Make:doMake(QString, QString)’未定义的引用 collect2: error: ld returned 1 exit status |
Make是类名。有Make.h文件,Make.cpp文件。
原因:类似于语法错误.
原来代码:
//Make.cpp文件
int doMake (QString source, QString result){
}
解决方案:将代码更改为一下代码:
//Make.cpp文件
int Make::doMake (QString source, QString result){
}
5.error: invalid operands of types ‘const char [22]’ and ‘const char*’ to binary ‘operator+’
原来代码:
std::string varStr1= "Error: "+e.what();
解决方案:将代码更改为一下代码:
std::string varStr1= "Error : ";
varStr1.append(e.what());