要更改Qt控件QTreeView中节点左侧的图标,可以通过代理(delegate)来实现。
首先,在MainWindow或其他窗体中,创建一个自定义代理类,继承自QStyledItemDelegate。在代理类中重写paint()函数,并在其中使用QPainter绘制想要显示的图标。
以下是一个示例代码:
class MyDelegate : public QStyledItemDelegate
{
public:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
QStyledItemDelegate::paint(painter, option, index);
// 绘制图标
if (index.column() == 0) // 只对第一列进行操作
{
QRect rect = option.rect;
int iconSize = 16; // 图标大小
// 根据index判断应该显示哪个图标
QIcon icon;
if (index.data(Qt::UserRole).toBool())
icon = QApplication::style()->standardIcon(QStyle::SP_DirIcon);
else
icon = QApplication::style()->standardIcon(QStyle::SP_FileIcon);
QPixmap pixmap = icon.pixmap(iconSize);
QRect pixmapRect(rect.left() + 4, rect.top() + rect.height() / 2 - iconSize / 2,
iconSize, iconSize);
painter->drawPixmap(pixmapRect, pixmap);
}
}
};
上面的代码将TreeView中第一列的每个单元格都绘制了一个文件夹或文件图标。根据需要,可以根据索引值、数据等条件来决定显示哪种图标。
接下来,在MainWindow或其他窗体中,将TreeView对象的setItemDelegate()方法设置为刚才创建的自定义代理即可:
ui->treeView->setItemDelegate(new MyDelegate);
这样就可以在TreeView中显示左侧的自定义图标了。