【问题标题】:QT C++ QTableWidget(Item) partially italicize (emphasize) textQT C++ QTableWidget(Item) 部分斜体(强调)文本
【发布时间】:2014-04-26 14:10:47
【问题描述】:

问题

我使用QTableWidget(Item) 来展示一些数据。为此,我需要将文本的某些部分斜体或设置粗体。问题:我不想斜体整个单元格/框,只是单元格中的部分文本。

想法

:使用 QTableWidgetItem 引用对应的单元格并尝试修改样式(例如 setFont(font))。但这种操作似乎总是改变整个细胞?

我还发现 this 对我的 QTableWidget 问题没有帮助。

通缉

:拥有一个 QTableWidget,例如2 行和包含单元格的列,例如:

Exa mple 单元格文本

(像Exa<b>mple</b> Cell <i>Text</i> 这样的好表示法只是次要方面)

注意:示例应该是一个单词。

【问题讨论】:

  • 似乎使用的通用 QStyledItemDelegate QTableWidget/QTableView 不支持富文本。我们有类似的需求并实现了一个自定义的 QStyledItemDelegate 来支持富文本。
  • 实现自定义委托的提示。使用qt-project.org/doc/qt-4.8/qtextdocument.html#drawContents
  • 你为什么说“我也发现这个对我的 QTableWidget 问题没有帮助”?相反,如果您不想重新实现 QStyledItemDelegate,这似乎是一种解决方案。

标签: c++ qt user-interface


【解决方案1】:

已解决

我只见树木不见森林。感谢 Salvatore Avanzo,他是完全正确的。

所有 Item Widget 类都提供了在每个单元格中呈现/绘制自定义内容的功能。

QTableWidget 提供setCellWidget(.. QWidget..)QListWidgetQTreeWidget 提供 setItemWidget(..QWidget..)。因此,您可以使用 QWidget (所有 ui 对象的基础) 的任何子类来绘制自定义内容。为了我的目标,我需要设置自定义部分强调/斜体文本的能力。 QWidget的绘制文本的Refering Subclass是QLabel(它本身也是QPainDevice的子类)。调用paintEvent(..) 时会绘制QWidget/QWidget 的子类(QLabel 重新实现了它)。 QLabel 还支持 RichText 功能(默认使用标志),例如您可以使用<b>foo</b> 获取foo

所以这完全符合我的问题,我现在将使用这个解决方案。

预测更好的结构化解决方案

上述解决方案的不足之处在于,设计和数据完全混合在一起。如果您设置引用交互标签,则可以在 QLabel 中编辑文本。但是你总是需要使用 QLabel 来获取文本。当在同样使用 QLabel 的 Cell 中另外设置 QTableWidgetItem 时,它们叠加起来很丑。所以可以使用 QTableView。这是link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多