在运行时动态改变 QStyle?

Posted

技术标签:

【中文标题】在运行时动态改变 QStyle?【英文标题】:Dynamically change QStyle at runtime? 【发布时间】:2015-07-06 20:58:37 【问题描述】:

我想在运行时调整现有样式,特别是 QStyle::PM_ToolBarIconSize。这可以做到吗?据我所知,你只能继承 QStyle 并覆盖 pixelMetric()。

编辑 1:在 QStyle::PM_ToolBarIconSize 的特定情况下,我可以使用 QToolBar::setIconSize,但这只会为单个工具栏实例设置图标大小。我想一举改变底层样式提示,以影响所有地方的所有工具栏。 QStyle::PM_ToolBarIconSize 可能不是我想要调整的唯一样式,它只是我正在查看的第一个样式,恰好具有“更改此实例的图标大小”功能。

编辑 2:我不能只创建一个新的样式子类,因为当前样式已经是基于样式表的自定义样式。用户可以选择多种样式。我不想为了调整几个工具栏图标或菜单高度大小设置而创建一堆新样式。

【问题讨论】:

QToolBar::setIconSize怎么样 是的,但这不是我想要的。希望我已经澄清了我的问题。 【参考方案1】:

那为什么不覆盖 QStyle 呢?您的子类将返回一个图标大小(通过 pixelMetric),这取决于您的 QStyle 的可设置参数。

由于 Qt 没有动态的 QStyle 机制,最好创建一个改变图标大小的新样式实例,然后将其设置到 QApplication,而不是改变当前样式。

【讨论】:

这对我来说不是一个可行的选择。我已经进一步澄清了我的问题,为什么会这样。【参考方案2】:

这正是 QProxyStyle 的用途。

【讨论】:

以上是关于在运行时动态改变 QStyle?的主要内容,如果未能解决你的问题,请参考以下文章

ios 运行时特征,动态改变控件字体大小

Flex 动态组件运行时创建

Java 反射基础

运行时的动态节标题高度

在运行时更改目标坐标(动态)

Spring Security 在运行时动态添加/删除 antMatchers 和角色