您当前的位置: 首页 > 

龚建波

暂无认证

  • 3浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

《QDebug 2021年2月》

龚建波 发布时间:2021-02-21 01:13:25 ,浏览量:3

一、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()            
关注
打赏
1655829268
查看更多评论
0.0783s