QT错误
错误:QJsonObject: No such file or directory
因为这个项目的文件夹里没有QJsonObject这个库。引用时用的是
#include <QJsonObject>
有两种解决办法:
- 把尖括号<>改成引号加.h的形式,即
#include "QJsonObject.h"
- 去QT的安装目录下找到include里面的QtCore文件夹,找到所需的QtJsonObject.h及其同名文件,复制到项目文件夹
我把 QT安装在D盘。所以我的文件路径如下:
D:\QT\5.14.2\msvc2017_64\include\QtCore
其中 msvc2017_64 换成 msvc2015_64 也可以,不太懂,看来两种编译器里这个库是一样的。
⚠ 注意两个文件都要复制,只复制.h文件没有用。
参考:link
错误:When executing step “qmake”
编译输出栏跳出红字的错误信息。网上看解决方案也看不懂。但是因为要打开的程序是别人的,我可以多次下载所以我又下载了一遍
最后解决方法:打开文件,跳出选择编译器的界面(因为这个程序的作者和我用的不是同一个版本),能选的全都选上,再编译就没有问题了
错误:calling ‘debug’ with incomplete return type ‘QDebug’
没引入头文件。include一下QDebug就好了
传路径过来打不开文件
注意看路径:
1.有没有少标点符号,比如/
2.有没有漏掉异层节点,比如把/aa/bb/cc打成/aa/cc
错误:Unexpected ‘else’. 和 AND operator without prior condition.
目前不是很懂,但是我之前手动在.pro文件里面增加了如下语句:
LIBS += -lopengl32\
-lglu32\
-lglut\
只要把这段删除就好了
但是这里删除后面就没法用openGL了,所以又找到两种解决方案(虽然我不清楚原理)
- 在LIBS前面加上win32:
win32:LIBS += -lopengl32\
-lglu32\
-lglut\
- 把后面的\去掉(这步之前我按照网上的教程配置了freeglut,不知道有没有影响)
LIBS += -lopengl32
-lglu32
-lglut
错误:collect2:ld returned 1 exit status
之前学C语言的时候经常遇到这个问题,都是因为exe程序还在运行,只要关掉小黑框或者程序关掉再打开就可以了。但是这次无论如何都不行。查找了一篇博客link 之后找到了原因:头文件中定义的函数在对应的,cpp文件中没有实现(空函数体也算实现,有就行)
错误:undefined reference to `MainWindow::on_map_control_aboutToCompose()’
一个槽函数出这个错,可能是因为在ui编辑界面点击转到槽,然后跳到cpp文件让你继续写这个槽函数,但是你不想要这个槽了所以就把默认给的这段cpp函数实现删掉了
但是mainwindow.h头文件里面还留着这个槽函数的声明,就会出现声明未定义的情况。这时候再去头文件找到这条声明删掉就好了。
这个错误信息点进去会跳到moc_mainwindow.cpp并且显示是switch语句里面的一个case找不到,这语句里所有的case都是选过的信号。如果直接把报错这个case注释掉好像也可以。
void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<MainWindow *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->on_action_open_sld_triggered(); break;
case 1: _t->on_actionopen_txt_triggered(); break;
default: ;
}
}
}
这不会就是帮忙审查有没有声明未定义函数的东西吧...
保持和头文件一致,以这个取衡量cpp。
所以最后其实在对比这些case和cpp文件是不是匹配。
故只在这里删除也是可以的,哪怕头文件里还留有残余。