首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在QTableView行上垂直居中对齐QProgressBar

的方法是使用QItemDelegate来自定义单元格的显示方式。具体步骤如下:

  1. 创建一个自定义的QItemDelegate类,继承自QStyledItemDelegate。
代码语言:txt
复制
class ProgressBarDelegate : public QStyledItemDelegate
{
public:
    ProgressBarDelegate(QObject* parent = nullptr)
        : QStyledItemDelegate(parent)
    {
    }

    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
    {
        if (index.data().isValid() && index.column() == targetColumn) {
            int progress = index.data().toInt();

            QStyleOptionProgressBar progressBarOption;
            progressBarOption.rect = option.rect;
            progressBarOption.minimum = 0;
            progressBarOption.maximum = 100;
            progressBarOption.progress = progress;
            progressBarOption.text = QString("%1%").arg(progress);
            progressBarOption.textVisible = true;
            progressBarOption.textAlignment = Qt::AlignCenter;

            QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
        }
        else {
            QStyledItemDelegate::paint(painter, option, index);
        }
    }

    QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override
    {
        if (index.data().isValid() && index.column() == targetColumn) {
            return QSize(100, option.rect.height());
        }

        return QStyledItemDelegate::sizeHint(option, index);
    }

private:
    int targetColumn = 1; // 设置对应的进度条所在的列号
};
  1. 在使用QTableView的地方,设置自定义的QItemDelegate。
代码语言:txt
复制
QTableView* tableView = new QTableView(this);
QStandardItemModel* model = new QStandardItemModel(this);
tableView->setModel(model);

// 设置进度条对应列的委托
ProgressBarDelegate* progressBarDelegate = new ProgressBarDelegate(this);
tableView->setItemDelegateForColumn(1, progressBarDelegate);

以上就是在QTableView行上垂直居中对齐QProgressBar的方法。使用自定义的QItemDelegate,可以根据需要灵活地定制单元格的显示效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券