首页 > 解决方案 > 如何自定义 Qt Items 的绘制事件?

问题描述

我想写一个音乐播放器,我想实现一个这样的音乐信息列表:

ID 喜欢 下载 姓名 艺术家 专辑 期间
01 这里有一个按钮 下载按钮在这里 音乐名称 ... ... 02:30

可以用QTableWidget或者QTreeWidget来实现,但是当我想在下载音乐的时候把整个item背景重新渲染成进度条,找不到这样的功能:

void QMusicListWidgetItem::paintEvent(QPaintEvent* event) {
    QPainter painter(this);
    int pos = this->downloadProgress / 1.0 * width();
    painter.setBrush(QColor(0, 120, 248));
    painter.drawRect(0, 0, pos, height());
    painter.setBrush(QColor(0, 0, 0));
    painter.drawRect(pos, 0, width() - pos, height());

    QWidget::paintEvent(event);
}

void QMusicListWidgetItem::updateProgressSlot(float progress) {
    this->downloadProgress = progress;
    update();
}

我尝试使用委托,但委托的绘制功能无法重新渲染整个项目背景。它只能自定义单个单元格的显示效果。

这种需求的正确解决方案是什么?

标签: qtlistviewqt5

解决方案


推荐阅读