我想在QTableview中实现一个委托,在文本旁边显示一个图标,我应该实现哪个类或函数?
答案 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
这样的最终结果
如果要显示图标,只需让自定义委托类中的#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
方法绘制一个图标即可。