QT 错误集锦

本文主要记录本人在QT编程中出现的各种错误,按道理来说是初学阶段最容易出现错误的,但由于是近期才有的想法,之前出现的很多错误已经想不起来了,所以只能记录从今天开始遇到的问题。问题如下:

(1)2016.10.09,Segmentation fault,程序运行崩溃了,我在调试模式的时候弹出说有这个问题,这个一般是有变量没有初始化就被调用出现的错误(非法内存访问),今天的错误是因为程序里有一个QSerialPort类型的变量没有初始化造成的,下面贴出一段链接,这个人对这个问题讲得挺好的:http://blog.chinaunix.net/uid-24347760-id-1989555.html,他提到了引起这个错误的操作有“数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存”,而具体原因是因为

1、解除引用一个包含非法值的指针。

2、解除引用一个空指针(常常由于从系统程序中返回空指针,并未经检查就使用)。

3、在未得到正确的权限时进行访问。

4、用完了堆栈或堆空间(虚拟内存虽然巨大,但绝非无限);

(2)2017.01.09 Cannot retrieve debugging output.

由于有两个IDE(5.7.1、5.5.1)同时开启了程序编译,后一个编译的IDE调用qdebug会报出这样的错误,只需要关闭掉其中一个编译好的程序就可以了,也就是说,我们只能用一个IDE进行qdebug操作;

(3)今天2019.0110 QString的arg不生效:

遇到一个很傻逼的问题,先看官方文档:

QT 错误集锦_第1张图片

这个QString的arg函数,会生成一个新的QString并作为返回值,而不是将本身修改为相对应的数据,也就是说文档中的写法:

QString str;
str = "%1%3%2";
str.arg("Hello").arg(20).arg(50); // returns "Hello500"
str = "%1%2%3";
str.arg("Hello").arg(50).arg(20); // returns "Hello5020"

到了最后,如果你用qDebug打印出str,将会打印出"%1%2%3",什么都没有改变,想要达到预期效果需要用以下代码:

QString str = "%1%2%3";
str = str.arg("Hello").arg(50).arg(20); // str = "Hello5020"

 

你可能感兴趣的:(QT,程序设计)