我已经在 Qt 应用程序上工作了一段时间,在重写了很多代码之后,我想给 GUI 一个提升。所以我在看 GUI 设计,并注意到大多数使用图像而不是原生按钮/滚动条/等。
我的主要问题是如何获取一个原生小部件,比如一个按钮,并显示一个按钮的图像,该按钮具有按钮的所有功能(动画点击、信号、插槽等)。我见过 QML 和其他方法来做到这一点,但我还没有找到使用常规 C++ 和 Qt 来做到这一点的方法。
最简单的方法是使用调色板和/或样式表来获得您想要的外观,或者至少接近您想要的外观。老实说,这是我推荐大多数用途的方式。
对于按钮,您可以通过继承QAbstractButton并为所有各种状态绘制自己的图像来做一些事情。您需要弄清楚您想要支持的状态,以及何时绘制它们(例如,查看传递给paintEvent的选项)。这有点困难,但代码方面相当简单。您使用此选项的主要问题是生成图像,并且结果对于调整大小很脆弱 - 也就是说,基本上,不允许这些按钮调整大小。另一个缺点是您必须为每个要设置样式的小部件执行类似的操作,而且其中许多都不像按钮那么简单。
一路走下去,你可以看看QStyle,以及各种样式是如何实现的。使用这些,您可以真正使任何小部件按照您希望的方式显示(在其绘制大小的限制内)。到目前为止,这是最难理解要做什么以及选项是什么的选项。此外,我上次查看时,许多选项并没有很好地记录它们在特定情况下的作用,所以当我不得不以这种方式进行一些更改时,这在很大程度上是一个反复试验的问题。