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

相关推荐
数据法师3 分钟前
QuickSay :基于 Qt 的轻量级快捷短语管理工具
开发语言·qt
乘~风14 分钟前
408考研-计组-1.2计算机系统层次结构笔记+1.3计算机性能指标
笔记·考研·408
caimouse16 分钟前
Reactos 第1章 概述
c语言·开发语言·架构
.千余25 分钟前
【C++】C++继承入门(下):友元、静态成员与菱形继承的底层逻辑
开发语言·c++·笔记·学习·其他
小短腿的代码世界34 分钟前
行情快照与增量更新引擎:Qt在高频交易数据分发中的核心架构——你的行情推送为什么延迟了500ms?
开发语言·qt·架构
初中就开始混世的大魔王39 分钟前
6 Fast DDS-传输层
开发语言·c++·中间件·信息与通信
啊森要自信1 小时前
【GUI自动化测试】控件、鼠标键盘操作与多场景自动化
c语言·开发语言·python·adb·ipython
花北城1 小时前
【C#】ABP框架服务端开发
开发语言·c#·abp
电商API_180079052471 小时前
Python 实现闲鱼商品列表批量采集,接口异常重试机制搭建
大数据·开发语言·数据库·爬虫·python
DogDaoDao1 小时前
深入理解 Qt:从原理到实战的全景指南
开发语言·qt·程序员