一、Qt Widgets 问题交流
1.setCellWidget 或者 setIndexWidget 插入的组件释放
setCellWidget(内部也是调用 setIndexWidget )插入的组件在下一次调用该接口替换之前插入的组件时,会自动释放上一次的组件,这时候我们再手动删除之前的组件就容易异常。
文档和源码如下:
void QAbstractItemView::setIndexWidget(const QModelIndex &index, QWidget *widget)
{
Q_D(QAbstractItemView);
if (!d->isIndexValid(index))
return;
if (indexWidget(index) == widget)
return;
if (QWidget *oldWidget = indexWidget(index)) {
d->persistent.remove(oldWidget);
d->removeEditor(oldWidget);
oldWidget->removeEventFilter(this);
oldWidget->deleteLater();
}
if (widget) {
widget->setParent(viewport());
d->persistent.insert(widget);
d->addEditor(index, widget, true);
widget->installEventFilter(this);
widget->show();
dataChanged(index, index); // update the geometry
if (!d->delayedPendingLayout)
widget->setGeometry(visualRect(index));
}
}
二、Qt Quick 问题交流
1.
三、其他
1.Qt获取文件MD5值
Qt 提供了 QCryptographicHash 类来执行 MD5、SHAxxx 等算法。Qt5.0 就提供了直接读取文件数据的接口:
bool addData(QIODevice* device);
接口内部默认 1k 分片读取:
bool QCryptographicHash::addData(QIODevice* device)
{
if (!device->isReadable())
return false;
if (!device->isOpen())
return false;
char buffer[1024];
int length;
while ((length = device->read(buffer,sizeof(buffer))) > 0)
addData(buffer,length);
return device->atEnd();
}
但是网上都是自己分片读取的,我简单了测试下分片的大小对处理速度没啥明显影响,估计都是 copy 的旧代码吧。
QFile file(filepath);
if(file.open(QIODevice::ReadOnly)){
//直接添加文件io用qt封装的分片读取
QCryptographicHash hash1(QCryptographicHash::Md5);
hash1.addData(&file);
qDebug()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?