【问题标题】:How to work out which widget to target with Qt stylesheets如何使用 Qt 样式表确定要定位的小部件
【发布时间】:2009-09-28 15:24:25
【问题描述】:

我正在尝试使用 Qt 样式表来设计一个相当复杂的 UI。到目前为止,一切进展顺利,但我遇到了困难:

如何确定我应该针对 UI 的特定部分使用什么小部件名称?例如,如果我想更改 QTableView 的单元格中的字体大小,我是否要编写针对 QTableView 的样式?或者可能是 QAbstractScrollArea?或者可能是 QAbstractitemDelegate?事实证明,这些似乎都不起作用 - 我认为这是可以做到的,但这是一个解决小部件的神奇组合以定位 UI 的正确部分的情况。

style sheet guide 有所帮助,但似乎缺少很多信息——自定义 QTableView 的示例仅提及自定义单元格背景颜色,并没有提及更改字体颜色、大小、面、网格线等。

我在这里错过了什么吗?也许使用样式表是错误的方法?我当然希望不会,因为替代方案(源自 QStyle)似乎要复杂得多。

干杯,

【问题讨论】:

  • 那么是说在您的 QApplication 实例上调用 setStyleSheet("QTableView { background-color: yellow }") 什么都不做?你能举出你尝试过的例子吗?
  • 不,抱歉 - 我只是说尝试操纵某些属性(在我的情况下为字体大小)在应用于表格视图时没有任何作用。
  • 你能发布你的代码吗?当你这样做时会发生什么: QTableView { font-size: 12px;选择颜色:黑色;选择背景颜色:黑色; }
  • 实际上没有太多代码可以发布——我只是将样式表文件的内容应用到 QApplication。当我尝试您的代码时,我收到一条警告,指出属性“selection-color”未知,并且所选行的背景为黑色。
  • 糟糕——选择颜色是一个错误。设置字体大小对你有用吗?

标签: c++ qt stylesheet


【解决方案1】:

项目视图中项目的呈现由委托完成。从 Qt 4.4 开始,默认情况下,内置项目视图使用可样式化的委托实现(请参阅此 blog post),但您似乎希望获得更多控制权。

在这种情况下,请确保您的模型的 data() 方法为与外观相关的ItemDataRoles 返回正确的值(我认为 Qt::FontRole 会特别引起您的兴趣)。如果这还不够,或者不可能,你应该继承QStyledItemDelegate 并重新实现它的paint() 方法。

对于网格线,QTableView 有gridStyle 属性。

【讨论】:

  • 嗨,那篇博文很有帮助,但是,他们使用的示例更改了背景颜色和边框 - 我似乎无法更改行高或字体大小。
  • Thomi:就像我在回答中提到的那样,那些东西(据我所知)不适合风格。确保您的模型返回一个 QFont 实例作为 FontRole 的数据,并返回一个 QSize 实例作为 SizeHintRole 的数据
猜你喜欢
  • 2011-11-08
  • 2011-04-06
  • 2011-04-04
  • 1970-01-01
  • 2013-08-08
  • 2011-05-25
  • 2011-05-25
  • 2016-07-07
  • 2020-02-15
相关资源
最近更新 更多