【个人笔记】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 小时前
SpringBoot01-配置文件
java·开发语言
晚风(●•σ )3 小时前
C++语言程序设计——06 字符串
开发语言·c++
我叫汪枫3 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
Nicole-----3 小时前
Python - Union联合类型注解
开发语言·python
晚云与城3 小时前
今日分享:C++ -- list 容器
开发语言·c++
兰雪簪轩4 小时前
分布式通信平台测试报告
开发语言·网络·c++·网络协议·测试报告
程序员Xu4 小时前
【LeetCode热题100道笔记】二叉树的右视图
笔记·算法·leetcode
FPGAI4 小时前
Qt编程之信号与槽
开发语言·qt
Swift社区5 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
0wioiw05 小时前
Go基础(④指针)
开发语言·后端·golang