Qt常见bug

一、bug

更换环境后,最好把pro.user删除,让其重新生成。
更改build构建目录

0.Qt报错:error: No rule to make target ‘XXX.cpp‘, needed by ‘debug/XXX.o‘.Stop.
解决:
检查pro文件中将SOURCES文件和HEADERS文件,是否实际文件与.pro里需要导入的文件不一致,是否有缺少。
注意:pro文件中的头文件和源文件需要按序,且不能重复。

1.E:\Edward\RxfFile.cpp:429: error: C2259: “CPdfDoc”: 无法实例化抽象类
错误原因:基类中有部分纯虚函数,没有在派生类中实现
具体原因:基类CXPdfdoc中有纯虚函数print没有在派生类CPdfdoc中实现,要补上。
具体改正:派生类CPdfdoc的定义在CPdfdoc.h中61行加入virtual void print(QWidget *p);


2.moc_HyeToolBar.obj : error LNK2001: 无法解析的外部符号 “public: void __thiscall HyeToolBar::OnVerifySignature(void)” (?OnVerifySignature@HyeToolBar@@QAEXXZ)
错误原因:函数OnVerifySignature在HyeToolBar.h头文件中声明了,但没有在实现文件HyeToolBar.cpp中实现
具体操作:在HyeToolBar.cpp的 307行加入

void HyeToolBar::OnVerifySignature()
{
if (!m_view)
  return;
m_view->OnVerifySignature();
}


3.没有找到重载的成员函数
错误原因:头文件的类里声明的函数,在实现文件[:类名函数名]里没实现,或者参数不一致。(声明的时候无参,实现的时候带参,这就不是同一个函数了)
在sr.h中定义的成员函数没有参数int add();
而在sr.cpp中成员函数实现中,又出现了参数int sr::add(S& a)
这是一个函数吗?参数到底是应该有,还是应该没有?


4.out-of-line definition of ‘FileWrite’ does not match any declaration in ‘CCommonUse’
(类中的声明,和函数的实现匹配不一致。 out-of-line:不一致)
错误原因:调用了未定义的内容或函数。这个函数的参数应该是和声明的不一样或者函数名字没有被声明,去类的定义哪里看看有没有声明这个函数
解决方法:检查函数或数据拼写和定义

总结:1-4都是函数声明与实现不一致造成的,原因相同,报错形式多种多样。


5.Cannot find file: E:\桌面\core\DesktopEditor\doctrenderer\app_builder\docbuilder.pro.
10:40:44: 进程"D:\QtCreator\Qt5.9.0\5.9\mingw53_32\bin\qmake.exe"退出,退出代码 2 。

Error while building/deploying project docbuilder (kit: Desktop Qt 5.9.0 MinGW 32bit)
When executing step “qmake”
错误原因:Qt项目路径不能有中文名
在这里插入图片描述


6.切换项目要重新 qmake、重新构建、再运行
不然切换了项目运行的结果还是之前项目的bug。具体原因:默认的build构建目录路径一般是上级目录。直接运行可能会使用之前项目构建好的build目录内容。所以,要么qmake + rebuild。要么就把之前生成的debug_build和release_build删除(也是重新生成新项目的build)。


7.UOS环境下qmake报错:警告:覆盖关于目标的配方(overriding recipe for targets)
在这里插入图片描述
错误原因:.pro文件中重复载入了某文件.h或者.cpp。
解决:删除其中一个,不要重复载入。

我的具体解决(具有特殊性,每个人要具体情况具体分析.pro文件里重复的部分是哪块):.pro文件结尾几行,默认所有平台都导入文件的部分注释掉
在这里插入图片描述
然后qmake就是绿色通过了,不再报错了。(不过在Win10上,没有注释掉这里,qmake也没报错。不明白UOS报错的原因)

8.经典错误**No such file or directory**
先用Everything/FSearch搜索一下是否有这个文件。若文件不存在那肯定就错了啊,若文件存在则检测是否是文件添加的路径问题
在Windows下的Qt,就找目标文件所在的路径,添加到.pro文件里的INCLUDEPATH += 绝对路径 / 相对路径 $$PWD/xxxxxx
一定要格外注意自己指代的路径 $${ }是否有误


9.unterminated conditional directive
原因:#ifdef 缺少对应的#endif
解决方法:添加#endif


10."qualified-id in declaration before (’ token"
可能会有一堆这种报错。要从第一个开始报错的地方往前找。问题就是前面漏了右小括号 ) ,或者右中括号 } 。或者左小括号,左中括号。


11.file not recognized: File truncated错误:
原因:这种错误一般是编译数据被截断或则编译过程中发生异常退出系统导致数据丢失;
解决:clean - qmake - 重新构建(rebuild)


12.野指针导致段错误(弹窗)

Signal received
The inferior stopped because it received a signal from the Operating System.
Signal name : SIGSEGV
Signal meaning : Segmentation fault

分析:可能是:①指针未初始化 ②指针指向临时变量,临时变量消亡后指针随即变为野指针。
解决:找到野指针出现的位置,想办法解决







二、warning

1.WARNING C4828: 文件包含在偏移 0X34B 处开始的字符,该字符在当前源字符集中无效(代码页 65001)
有一些.h头文件的编码格式是GB2312,改为UTF-8格式即可

修改编码格式方法,Visual Studio高级保存选项:https://www.freesion.com/article/2000991189/


2.warning C4290: 忽略C++ 异常规范,但指示函数不是__declspec(nothrow)
在文件开头加上宏

#pragma warning (disable:4290)

参考来源:https://blog.csdn.net/linshixina/article/details/7815132/


3.warning: C4715: 不是所有的控件路径都返回值
就是没有考虑到所有情况的return,把这些情况也补上return即可

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
选择Qt组件还是Qt源代码,应根据项目的具体需求进行评估和决策。 Qt组件是指Qt平台提供的一系列高度封装、易用的组件,可以有效地提升开发效率和代码质量。这些组件已经经过充分的测试和验证,具有稳定性和可靠性。选择Qt组件可以快速地构建应用程序,减少重复性的工作,提高开发效率。特别是对于一些常见的功能需求,例如图形界面、网络通信、数据库操作等,Qt组件提供了丰富的选项,可以满足各种开发需求。 Qt源代码则是指Qt平台的开源代码,具有高度灵活性和可定制性。选择Qt源代码可以在有特定需求的情况下,深入了解和定制Qt框架的内部实现,以满足项目的特殊要求。特别是在需要进行底层功能扩展、优化或者修复bug时,Qt源代码可以提供更直接的操作方式。同时,通过对源代码的研究和调试,也可以加深对Qt框架的理解和掌握。 综上所述,选择Qt组件还是Qt源代码应根据项目的需求来决策。如果项目对开发效率和稳定性要求较高,且需要的功能在Qt组件已经有完备的实现,可以优先选择Qt组件。如果项目对灵活性和定制性要求较高,或者需要做一些底层的功能扩展或者调优,可以选择Qt源代码进行开发。当然,根据具体情况,也可以在使用Qt组件的同时,辅以对Qt源代码的研究和定制来满足项目的特殊需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员爱德华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值