如何为 Qt GUI 小部件使用图像

Posted

技术标签:

【中文标题】如何为 Qt GUI 小部件使用图像【英文标题】:How to use images for Qt GUI widgets 【发布时间】:2012-09-18 03:18:42 【问题描述】:

我已经在 Qt 应用程序上工作了一段时间,在重写了很多代码之后,我想给 GUI 一个提升。所以我在看 GUI 设计,并注意到大多数使用图像而不是原生按钮/滚动条/等。

我的主要问题是如何获取原生小部件,例如按钮,并显示具有按钮所有功能(动画点击、信号、插槽等)的按钮图像。我见过 QML 和其他方法来做到这一点,但我还没有找到使用常规 C++ 和 Qt 来做到这一点的方法。

【问题讨论】:

【参考方案1】:

最简单的方法是使用palette 和/或stylesheets 来获得您想要的外观,或者至少接近您想要的外观。老实说,这是我推荐大多数用途的方式。

对于按钮,您可以通过继承 QAbstractButton 并为所有不同的状态绘制自己的图像来做一些事情。您需要弄清楚您想要支持的状态,以及何时绘制它们(例如,查看传递给paintEvent 的选项)。这有点困难,但代码方面相当简单。您使用此选项的主要问题是生成图像,并且结果对于调整大小很脆弱 - 也就是说,基本上,不允许这些按钮调整大小。另一个缺点是您必须为每个要设置样式的小部件执行类似的操作,而且其中许多都不像按钮那么简单。

要一路走下去,可以看看QStyle,各种样式是怎么实现的。使用这些,您可以真正使任何小部件按照您希望的方式显示(在其绘制大小的限制内)。到目前为止,这是最难理解要做什么以及选项是什么的选项。此外,我上次查看时,许多选项并没有很好地记录它们在特定情况下的作用,所以当我不得不以这种方式进行一些更改时,这在很大程度上是一个反复试验的问题。

【讨论】:

感谢您的建议。但是,我想我只会学习使用 QML。这似乎是定制 GUI 的更好方法。

以上是关于如何为 Qt GUI 小部件使用图像的主要内容,如果未能解决你的问题,请参考以下文章

QT Creator:如何为自定义小部件生成库和测试可执行文件

简单的 Qt 小部件来绘制线条和形状(如 tkinter 画布)?

如何在多个 QT 图形视图小部件之间同步移动

QT - 在不阻止他的 GUI 的情况下显示小部件

在 Qt 中创建小部件预览

Qt:访问在构造函数之外使用 GUI 小部件的类的函数