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

Posted

技术标签:

【中文标题】使用 QStyledItemDelegate paint() 在表格中绘制图标【英文标题】:drawing icons in a table with QStyledItemDelegate paint() 【发布时间】:2013-05-23 13:13:17 【问题描述】:

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

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

paint函数的代码是:


   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】:

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; 放在您的绘画事件顶部来确保它到达您的绘画事件。

希望对您有所帮助。

【讨论】:

是的,我看过明星代表的例子,但它并没有完全告诉我我认为我需要知道什么。部分问题是它没有使用图标,特别是。不过会再看一遍。就装饰角色而言,你能用它来混合文本和图形吗?最终,这就是我需要做的,而我的研究表明,代表确实是实现这一目标的唯一方法...... 你为你的元素设置了sizeHints吗? 问题与我的 git 仓库有关。讨论仍然提供了一些见解,帮助我走出了这条路......

以上是关于使用 QStyledItemDelegate paint() 在表格中绘制图标的主要内容,如果未能解决你的问题,请参考以下文章

QListView 与 CustomWIdget 使用 QStyledItemDelegate

在带有 QSqlQueryModel 的 QListView 上使用 QStyledItemDelegate

QStyledItemDelegate 部分选择默认 QLineEdit 编辑器的文本

PyQt:在 QStyledItemDelegate 中使用 QTextEdit 作为编辑器

QStyledItemDelegate - updateEditorGeometry 如何工作?

QStyledItemDelegate 绘制自定义小部件失败