【个人笔记】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 对象不能被添加到多个布局中。

相关推荐
爱吃生蚝的于勒11 分钟前
一文学会c++继承 组合
java·c语言·开发语言·数据结构·c++·算法·蓝桥杯
WSSWWWSSW11 分钟前
Numpy科学计算与数据分析:Numpy数据分析基础之统计函数应用
开发语言·python·数据挖掘·数据分析·numpy
ouliten24 分钟前
cuda编程笔记(13)--使用CUB库实现基本功能
笔记·cuda
西猫雷婶29 分钟前
python学智能算法(三十四)|SVM-KKT条件回顾
开发语言·人工智能·python·算法·机器学习·支持向量机
zgc124536737 分钟前
Linux学习-数据结构(链表)
linux·开发语言·数据结构·vscode·链表
OEC小胖胖39 分钟前
幕后英雄 —— Background Scripts (Service Worker)
开发语言·前端·javascript·浏览器·web·扩展
mailtolaozhao4 小时前
C#入门--Hello world
开发语言·c#
王维志4 小时前
C# 中的 DateTime
开发语言·c#·.net
重生之我是Java开发战士4 小时前
【C语言】文件操作全解析
c语言·开发语言
歪歪1009 小时前
HTML 如何转 Markdown
开发语言·chrome·python·程序人生·html