【个人笔记】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 小时前
rust语言学习笔记Trait(九)PartialEq、 Eq(相等比较)
笔记·学习·rust
玄米乌龙茶1233 小时前
LLM成长笔记(七): AI 应用框架与编排
前端·人工智能·笔记
沐知全栈开发3 小时前
Servlet 表单数据处理指南
开发语言
超梦dasgg3 小时前
详细讲解:WebMvcConfigurer 接口
java·开发语言·spring
互联网江湖3 小时前
贝壳一季报,等来春暖花开?
笔记
阿里嘎多学长3 小时前
2026-05-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
JAVA社区3 小时前
Java进阶全套教程(三)—— Spring框架核心精讲
java·开发语言·spring·面试·职场和发展·mybatis
jzlhll1233 小时前
Kotlin 协程高级用法之 NonCancellable
android·开发语言·kotlin
w2018004 小时前
三年级下册语文第五单元作文:奇妙的想象
笔记
我是唐青枫4 小时前
C#.NET YARP + OpenTelemetry:网关链路追踪实战
开发语言·c#·.net