一、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()
关注
打赏