使用QStyledItemDelegate paint()在表中绘制图标

时间:2013-05-23 13:13:18

标签: qt qpainter qstyleditemdelegate

我正在尝试为QStyledItemDelegate子类(QT4.8.2)实现自定义绘制函数。

我已经回顾了StarItemDelegate示例等等,它看起来非常简单。委托被分配给表的一列,指示记录状态。列项目是可编辑的,但不能由用户编辑。我已经实现了委托子类并且已经证明它可以工作,但似乎无法用它来绘制一个简单的图标。

绘画功能的代码是:

{
   painter->save();
   QIcon icon(":./opencs.png");
   QSize iconsize = option.decorationSize;

   painter->drawPixmap(0.0, 0.0, icon.pixmap(iconsize.width(), iconsize.height()));

   painter->restore();
 }

现在,我只是想确保绘画功能正常工作。该图标已在应用程序的其他区域中使用,因此我知道它有效。我还没有很好地掌握QT,所以我确定这是一个相当简单的问题需要解决,但是我没有从我已经阅读的论坛帖子或我设法挖掘的QT示例中跳出来起来。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

http://qt-project.org/doc/qt-4.8/qstyleditemdelegate.html#details

http://qt-project.org/doc/qt-4.8/qt.html#ItemDataRole-enum

您是否考虑过使用Qt::DecorationRole

只需阅读此处的文档:

http://qt-project.org/doc/qt-4.8/qstyleditemdelegate.html#subclassing-qstyleditemdelegate

http://qt-project.org/doc/qt-4.8/qstyleditemdelegate.html#paint

和您的示例代码,看起来您正在正确地遵循文档...

你看过这个例子:

http://qt-project.org/doc/qt-4.8/itemviews-stardelegate.html

您还可以在其中输入一些qDebug语句,以确保您的元素可见/显示,并通过将qDebug() << Q_FUNC_INFO;放在paint事件的顶部来转到paint事件

希望有所帮助。