使用QtableView中的委托来显示图标

时间:2018-03-30 11:58:53

标签: c++ qt model-view-controller delegates qtableview

我想在QTableview中实现一个委托,在文本旁边显示一个图标,我应该实现哪个类或函数?

1 个答案:

答案 0 :(得分:0)

您可以继承QStyledItemDelegate并将自己的委托类设置为视图窗口小部件,该窗口小部件继承自QAbstractItemView(例如background: url('../../img/img-title.png')QColumnView等)来自{{ 3}}方法。

这是一个简单的示例,它使用此机制在带有QTableView的颜色名称之前渲染颜色块。

QTableWidget

中的

main.cpp
#include "QTableWidget" #include "delegatedemo.hpp" #include <QApplication> int main(int argc, char* argv[]) { QApplication app(argc, argv); QTableWidget tableWidget(10, 1); QStringList headerLabels; headerLabels << "color"; tableWidget.setHorizontalHeaderLabels(headerLabels); tableWidget.setItemDelegate(new iconItemDelegate); tableWidget.show(); return app.exec(); }

中的

delegatedemo.hpp

这样的最终结果

Delegate Demo

如果要显示图标,只需让自定义委托类中的#ifndef DELEGATEDEMO_HPP #define DELEGATEDEMO_HPP #include <QPainter> #include <QStyledItemDelegate> class iconItemDelegate : public QStyledItemDelegate { Q_OBJECT public: iconItemDelegate(QWidget* parent = 0) : QStyledItemDelegate(parent) { } void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QColor color(index.data().toString()); QRect cellRect = option.rect; int cH = cellRect.height(); QRect colorIconArea(QPoint(cH * 0.25, cellRect.y() + cH * 0.25), QSize(cH * 0.5, cH * 0.5)); if (color.isValid()) { painter->fillRect(colorIconArea, QBrush(color)); painter->drawText(QPoint(cH, cellRect.y() + cH * 0.75), index.data().toString()); } } }; #endif // DELEGATEDEMO_HPP 方法绘制一个图标即可。