使用 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 作为编辑器