QTableView 表格中插入图片、勾选框、下拉框

QTableView 表格中插入图片、勾选框、下拉框

效果图在这里插入图片描述
QT的Delegate,可以实现TableView中每一个单元格的显示形式。本例利用Delegate的paint函数绘制出图片、勾选框、下拉框样式。

具体代码:

void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                       const QModelIndex &index) const
{
    QStyleOptionViewItem viewOption(option);
    if (option.state.testFlag(QStyle::State_HasFocus))
        viewOption.state = viewOption.state ^ QStyle::State_HasFocus;

    if(index.column() == 0){    //图片
        const QAbstractItemModel * model=index.model();
        QVariant var=model->data(index,Qt::DisplayRole);
        if(var.isNull()) var=false;
        QPixmap show=var.toBool()? QPixmap(":/svg/plus.svg"): QPixmap(":/svg/minus.svg");
        QRect rect=option.rect;
        show = show.scaled(rect.width(), rect.height(),
                           Qt::KeepAspectRatio);
        int width=show.width();
        int height=show.height();

        int x=rect.x()+rect.width()/2-width/2;
        int y=rect.y()+rect.height()/2-height/2;

        painter->drawPixmap(x,y,show);
    }else if (index.column() == 1) {    //勾选框
        bool d = index.model()->data(index, Qt::EditRole).toBool();
        QStyleOptionButton checkBoxStyle;
        checkBoxStyle.state = d ? QStyle::State_On : QStyle::State_Off;
        checkBoxStyle.state |= QStyle::State_Enabled;
        checkBoxStyle.iconSize = QSize(32, 32);
        checkBoxStyle.rect = option.rect;

        QCheckBox checkBox;
        QApplication::style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &checkBoxStyle, painter, &checkBox);
    }else if (index.column() == 2) {    //下拉框
        QString value = index.model()->data(index, Qt::EditRole).toString();
        QStyleOptionComboBox comboBoxStyle;
        comboBoxStyle.currentText = value;
        comboBoxStyle.state |= QStyle::State_Enabled;
        comboBoxStyle.rect = option.rect;

        QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &comboBoxStyle, painter);
        QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxStyle, painter);
    }
}
  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值