开发笔记

  • 首页
  • 工具箱
三味线的博客
  1. 首页
  2. Qt
  3. 正文

QTableView单元格显示图标

2019-03-29 4485点热度 25人点赞 0条评论

方法一:代理

新建一个代理类,重写paint函数:

class CommonDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    CommonDelegate();
private:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
CommonDelegate::CommonDelegate()
{
}
void CommonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItem itemOption(option);
    if(itemOption.state&QStyle::State_HasFocus)
    {
        itemOption.state=itemOption.state^QStyle::State_HasFocus;
    }
    if(3==index.column())
    {
        QPixmap pix;
        if(QString("结案")==index.data().toString())
            pix.load(":/Resources/check.png");
        else if(QString("激活")==index.data().toString())
            pix.load(":/Resources/active.png");
        QRect rect=option.rect;
        rect.adjust(0,6,0,0);
        rect.setSize(QSize(20,20));
        pix.scaled(20,20,Qt::KeepAspectRatio);
        painter->setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
        painter->drawPixmap(rect,pix);
    }
    QStyledItemDelegate::paint(painter,itemOption,index);
}

TableView设置:

this->setItemDelegate(new CommonDelegate());

效果:

图标和文字重叠,且点击后看不到图标,这不是我想要的效果。

方法二:重写Model

继承QSqlQueryModel(一般使用QSqlTableModel即可),重写data函数:

class SqlTableModel : public QSqlQueryModel
{
    Q_OBJECT
public:
    explicit SqlTableModel(QObject *parent=0);
    ~SqlTableModel();
    QVariant data(const QModelIndex &idx, int role) const;
};
QVariant SqlTableModel::data(const QModelIndex &idx, int role) const
{
    QVariant value=QSqlQueryModel::data(idx,role);
    if(3==idx.column()&&Qt::DecorationRole==role)
    {
        QString PNType=idx.data().toString();
        if(QString("结案")==PNType)
        {
            return QIcon(":/Resources/check.png");
        }
        else if(QString("激活")==PNType)
        {
            return QIcon(":/Resources/active.png");
        }
    }
    return value;
}

效果:

部分效果需要使用QSS:

QTableView{
    font-family:"Microsoft Yahei";
    font-size:10pt;
    color: rgb(26,52,93);
    selection-color: black;
    selection-background-color: rgb(255,209,128);
    border: 0px;
    border-top: 1px solid lightgray;
}

更多QSS使用方法,在Qt助手中搜索stylesheet,在Qt Style Sheets Examples 中查看。

标签: Qt
最后更新:2020-06-06

三味线

不吃咸鱼的喵

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

Captcha Code

COPYRIGHT © 2022 voidcat.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备18010095号-1