QT:遇到的bug及解决方法

目录

Bug1:2个重载没有“this”指针的合法转换

Bug2:已超过最大连接数,请关闭其他客户端重试

Bug3:在执行redo和undo的时候程序崩溃

Bug4:使用dynamic_cast时提示dynamic_cast的目标类型无效

Bug5:提示非标准语法;请使用 "&" 来创建指向成员的指针

Bug6:invalid null parameter

Bug7:尝试引用已删除的函数/不能实例化抽象类

Bug8:无法隐式捕获,因为尚未指定默认捕捉模式

Bug9:Debugger encountered an exception: Exception at 0x7fffff3ba7e8, code: 0xc0000005: read access violation at: 0xffffffffffffffff, flags=0x0

Bug10:Attempting to add QLayout "" to xxx "widget",which already has a layout

Bug11: obj LNK2001: 无法解析的外部符号 


Bug1:2个重载没有“this”指针的合法转换

 

解决方法

这个问题是函数作用域问题。因为我定义的undoMap和redoMap在connect外部,而我在connect里调用了undoMap。只需要将定于移到connect里即可。

Bug2:已超过最大连接数,请关闭其他客户端重试

 解决方法

这个提示看似是连接数超了,其实是因为调用到的函数头文件中的#ifndef#define没有修改(就是函数写的时候为了偷懒直接复制了其他的头文件,但是没有修改#ifndef#define,导致了重复,让程序在找这个函数的时候没找到)。

Bug3:在执行redo和undo的时候程序崩溃

QT:遇到的bug及解决方法_第1张图片

解决方法

Debug时发现在push(cmd)这里出错了。发现是因为没有new undoStack()就直接调用了。

QT:遇到的bug及解决方法_第2张图片

在Scene界面new一下即可。

Bug4:使用dynamic_cast时提示dynamic_cast的目标类型无效

QT:遇到的bug及解决方法_第3张图片

 解决方法

添加转换类型的头文件。

比如,图中的错误,添加头文件

#include "GroupItem.h"

#include "BaseNodeItem.h"  即可解决问题。

【注意】在调用其他类的时候,发现无法使用对应类的方法,可以看看是不是忘记加头文件了。

Bug5:提示非标准语法;请使用 "&" 来创建指向成员的指针

QT:遇到的bug及解决方法_第4张图片

 解决方法:

该提示表明在调用成员函数的函数没有添加()

这里只需要把第二个getScene改为getScene(),即可通过。

Bug6:invalid null parameter

 解决方法:

情况一:先new,再connect

指针为空,指针没指向对象,需要进行初始化才可以
1.指针new的对象在其connect之后
2.指针并未new出对象

情况二:将connect写到其他地方

这里遇到的就是情况二,我在初始化的时候使用connect,想让view获取scene传来的参数,但是因为初始化时还没有scene所以提示为空。在view里找一个函数,先对scene判空一下,再使用connect更为保险。

Bug7:尝试引用已删除的函数/不能实例化抽象类

这个两种报错的实质是一样的。即传入是指针,接收变量没有 星号(*)

QT:遇到的bug及解决方法_第5张图片

QT:遇到的bug及解决方法_第6张图片

解决方法

这个问题产生的原因是因为转入的是指针,但是接收的构造函数不是指针,只要在构造对应的变量时添加 * 即可解决。

将BaseObjectItem _nextParent; 改成 BaseObjectItem *_nextParent;


QT:遇到的bug及解决方法_第7张图片

QT:遇到的bug及解决方法_第8张图片

解决方法:

将QGraphicsItem _nextParent; 改成 QGraphicsItem *_nextParent;

Bug8:无法隐式捕获,因为尚未指定默认捕捉模式

QT:遇到的bug及解决方法_第9张图片

解决方法:

修改connect中的[]中的值。

默认捕获模式为[=](按值)和[&](按引用)。 [ ]表示没有捕获。

Bug9:Debugger encountered an exception: Exception at 0x7fffff3ba7e8, code: 0xc0000005: read access violation at: 0xffffffffffffffff, flags=0x0

QT:遇到的bug及解决方法_第10张图片QT:遇到的bug及解决方法_第11张图片

解决方法:

这里的问题是因为多次触发,导致卡住,程序崩到了这里。比如,多次触发鼠标事件(因为graphics的鼠标事件可以递归传递的),或者是在基类里调了子类导致循环引起的多次触发。

这里我遇到的是,析构问题。在delete线后,线的paint函数里的setPath()导致了这个问题。【就这一句,卡了我好久,谁能想到在这里...】

Bug10:Attempting to add QLayout "" to xxx "widget",which already has a layout

SRCFileTreeView是我在ui里提升过来的,一般提升过来的控件,如果里面不再加控件不需要添加布局。

QT:遇到的bug及解决方法_第12张图片

Bug11: obj LNK2001: 无法解析的外部符号 

QT:遇到的bug及解决方法_第13张图片

解决方法:看一下提示的文件名称,进去看一下头文件的宏定义有没有写错,我就是宏定义再复制粘贴替换的时候写错了,重复写了个view导致的。修改成正确的就好了。

可以检查一下文件名有没有写对,之前遇到过在末尾加了空格,半天看不出来。

QT:遇到的bug及解决方法_第14张图片

你可能感兴趣的:(QT,bug,qt,c++)