qsqlite 存儲和展示一個blob字段的數據

qsqlite存儲一個blob字段

第一種,通過直接使用sql語句進行存儲:


    sql = QString("INSERT INTO phone_video_fragment_display (_id,thumbnail,name,video_fragment_id) VALUES(%1,:thumbnail,'%2',%3);")
                  .arg(i64_phone_video_fragment_display_max_id)
                  .arg("demo....")
                  .arg(i64_phone_video_fragment_max_id);
    query.prepare(sql);
        //示例圖片
    QFile o_demo_jpeg("demo.jpg");
    auto open_result = o_demo_jpeg.open(QIODevice::ReadOnly);
    auto ba_demo_jpeg = o_demo_jpeg.readAll();
    query.bindValue(":thumbnail",ba_demo_jpeg);
    qDebug() << query.boundValues();
    auto exe_result = query.exec();
    auto error = query.lastError();
    qDebug() << error.text();

如上將thumbnail 圖片存入數據庫


第二種,通過更上層的接口

QSqlTableModel提供的insertRecord

(QSqlTableModel關聯一個數據庫的一張表,對其進行顯示或者操作)

    QSqlRecord record;
    QSqlField _id("_id",QVariant::LongLong);
    _id.setValue(i64_phone_video_fragment_display_max_id);
    QSqlField image("thumbnail",QVariant::ByteArray);
    image.setValue(ba_demo_jpeg);
    QSqlField name("name",QVariant::String);
    name.setValue(QString::number(i64_phone_video_fragment_display_max_id));
    QSqlField video_fragment_id("video_fragment_id",QVariant::LongLong);
    video_fragment_id.setValue(i64_phone_video_fragment_max_id);
    record.append( _id );
    record.append( image );
    record.append( name );
    record.append( video_fragment_id );

    this->m_p_obj_phone_video_fragment_model->insertRecord( -1,record );
    this->m_p_obj_phone_video_fragment_model->select();


別忘了select提交所有更改並刷新ui


要展示一個blob字段,如上的圖片,我們需要自己子類化一個delegate的paint接口

void CPhoneVideoFragmentDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    //列說明:0._id,1.圖片,2.名字,3.底層的視頻碎片id
    if(index.column() == 1)
    {
        auto ba_image = index.model()->data(index).toByteArray();
        auto image = QImage::fromData(ba_image);
        painter->drawImage(option.rect,image);
    } else {
        return (QStyledItemDelegate::paint(painter,option,index));
    }
    return ;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章