【个人笔记】Qt使用的一些易错问题

目录

1.QByteArray导致程序运行的异常行为

2.QSpacerItem导致的程序退出时的崩溃问题


1.QByteArray导致程序运行的异常行为

代码如下:

cpp 复制代码
void func1()
{
    ...
    int len = 10;
    QByteArray arr('0',len);
    const char* pData = arr.constData();
    func2(pData,len);
    ...
}

void func2(const char* pData,int len)
{
    ...
    int pos = 0;
    quint8 val = pData[pos];
    pos++;
    ...
}

在func2的执行过程中pData的地址会变为0x000000000000,原因是QByteArray是在func1中定义的局部变量,不能使用constData()做函数参数,可以改为用const QByteArray& arr做函数参数。

2.QSpacerItem导致的程序退出时的崩溃问题

代码如下:

cpp 复制代码
	QHBoxLayout* pLayout1 = new QHBoxLayout();
    QSpacerItem* pSpacerItem1 = new QSpacerItem(70, 20);
	QPushButton* pBtnClear = new QPushButton(QStringLiteral("清空"));
	QPushButton* pBtnExport = new QPushButton(QStringLiteral("导出"));
	QPushButton* pBtnImport = new QPushButton(QStringLiteral("导入"));
	
	pLayout1->addSpacerItem(pSpacerItem1);
	pLayout1->addWidget(pBtnClear);
	pLayout1->addWidget(pBtnExport);
	pLayout1->addWidget(pBtnImport);
	pLayout1->addSpacerItem(pSpacerItem1);

上述的代码会导致程序退出时内存崩溃,问题是因为 pSpacerItem1 被添加到布局中两次。在 Qt 中,布局管理器会自动管理其子控件的内存,但同一个 QSpacerItem 对象不能被添加到多个布局中。

相关推荐
艾莉丝努力练剑1 小时前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
还债大湿兄3 小时前
《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
c++·qt·mfc
深圳卢先生5 小时前
CentOS 安装jenkins笔记
笔记·centos·jenkins
倔强青铜35 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
珊瑚里的鱼6 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上6 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
xingshanchang6 小时前
Matlab的命令行窗口内容的记录-利用diary记录日志/保存命令窗口输出
开发语言·matlab
Risehuxyc6 小时前
C++卸载了会影响电脑正常使用吗?解析C++运行库的作用与卸载后果
开发语言·c++
AI视觉网奇6 小时前
git 访问 github
运维·开发语言·docker