QTableView的表格项中加入图标的方法

当在使用表格视图的时候,需要在表格每一行前面加入图标,应该怎么做呢?Qt中通过使用MVC的处理方式,很容易做到这一点,具体实现如下:

先贴出图,让大家一睹为快

下面我就来介绍一下,上图的灯泡是怎么实现的,通过重载QAbstractTableModel中的data方法,如下:(CTblModel 派生自QAbstractTableModel

QVariant CTblModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();
    
    int col = index.column();
    if (col == ledColIndex && role == Qt::DecorationRole)
    {
        return QIcon(":/images/light.png");
    }
    else
    {
        ...
    }
    return QVariant();
}
对于mvc的使用方法,请参考http://blog.csdn.net/rabinsong/article/details/8452946


让图片动起来,能够响应用户事件,当用户单击灯泡时,灯泡会点亮,这个怎么实现呢?

要实现这个功能,首先要能接受到鼠标事件,其次,要知道鼠标点击了灯泡部分,不能鼠标不在灯泡上点击,灯泡也亮。有了这两点,下面我们来看看实现:

我们可以通过重载QTableView的 mousePressEvent(),从而获得对鼠标单击的控制权,通过indexAt方找到当前单击的index,再根据索引找到灯泡所在的列,具体实现如下:

void CTblView::mouseMoveEvent(QMouseEvent *event)
{
    const QPoint &p = event->pos();
    QModelIndex modelIndex = indexAt(p);
    if (modelIndex.isValid())
    {
        int col = modelIndex.column();
        int row = modelIndex.row();
        if (col == ledColIndex)
        {
            pTblModel->setLight(row);
        }
    }
}

pTblModel就是上面定义的CTblModel,到了这里大家应该知道了基本实现思路了吧。


让图标变大一些,按照上面的做法,灯泡图标的大小很小,不管你的light.png图片多大,在表格中显示时的图标大小默认都很小,那么怎么改变图标的大小呢?方法也很简单,就是在CTblView构造函数中加入setIconSize(QSize(25,25));我设置的是25*25大小,显示效果如上图的灯泡效果,大家可以根据自己的应用,调整其大小。






`QTableView` 是 Qt 库中的一个组件,用于显示表格数据。如果你想让表格中的文字居中显示,你可以通过设置单元格样式(Cell Style)来实现。以下是一个基本步骤: 1. **创建 QStyle 或选择内置样式**: 首先,你需要获取一个 `QApplication` 的默认样式,或者创建自定义样式。 ```python from PyQt5.QtWidgets import QApplication, QTableView, QStyledItemDelegate, QFileIconProvider app = QApplication([]) style = app.style() ``` 2. **创建自定义 Delegate**: 创建一个 `QStyledItemDelegate` 的子类,并覆盖 `paint()` 函数以控制单元格内容的渲染。在这里,我们将设置文本对齐为居中。 ```python class CenteredTableWidgetItemDelegate(QStyledItemDelegate): def paint(self, painter, option, index): super().paint(painter, option, index) painter.setAlignment(Qt.AlignCenter) # 设置文本居中对齐 painter.drawText(option.rect, option.textDirection, index.model().data(index)) ``` 3. **应用到 QTableView**: 将自定义的 delegate 绑定到 `QTableView` 的每个单元格上。 ```python tableView = QTableView() tableView.setItemDelegateForColumn(0, CenteredTableWidgetItemDelegate()) # 指定你想居中的列 ``` 4. **设置模型数据**: 然后添加数据模型(如 `QStandardItemModel`)并填充数据。 ```python model = QStandardItemModel() # 添加数据... tableView.setModel(model) ``` 现在,表格中的文字应该会按照居中对齐的方式显示了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RabinSong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值