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

相关推荐
人邮异步社区7 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大7 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai7 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
破碎的南瓜8 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
এ慕ོ冬℘゜8 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa8 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行8 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
你想知道什么?8 小时前
线性回归-学习笔记
笔记·学习·线性回归
谙弆悕博士8 小时前
系统集成项目管理工程师教程(第3版)笔记——第17章:法律法规和标准规范
笔记·职场和发展·学习方法·业界资讯·软考·法律·法规
噢,我明白了9 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel