作为一个爱好,我一直在努力改造一个旧的视频游戏,我想尽可能避免重新发明轮子。该游戏基于GUI,但GUI需要在外观方面进行自定义,并且还需要在几个游戏屏幕上使用3D OpenGL渲染。
为了给你一个想法,这里是最初原型的截图:
使用了很多动画,3D也是如此,但GUI小部件的行为与标准桌面应用程序中的大致相同。
到目前为止,我一直在使用自己的GUI库(它不健壮或完整,我遇到了一些问题)。
我一直在考虑迁移到Qt,因为它的声誉和令人印象深刻的功能,以及Qt网站上的一些很好的截图。但我之前从未使用过Qt,所以我真的不知道它的功能是什么,或者学习它需要多少时间投入。 (注意我使用过FLTK)。
我的问题是:在这种情况下使用Qt是否可行/实用?
更新:在Qt中模拟一些游戏画面后,我决定不使用它。虽然它支持我开箱即用的许多功能(特别是通过样式表),但我需要支持基于位图的自定义预渲染字体(我无法转换/替换它们)。我不能将QFont子类化,或者在未来的Qt版本中重新实现它。也就是说,Qt(它的易用性和良好的文档)给我留下了非常深刻的印象。我将为我自己的引擎借用它的一些功能。感谢所有提供意见的人。
答案 0 :(得分:4)
根据截图,很难知道游戏需要做的一切;但是,我会在这里回应其他海报的情绪,并提供一些途径让你看。
其一,是你可能想在图形视图框架上考虑QtQuick,但这真的取决于你需要做什么。我只是想把它扔出去作为替代,所以你不要错过它。这个tutorial使用QtQuick组合了一个非常光滑的连接四风格游戏。这可能比你想要的更简单,但话说再说,也许不是,这取决于你需要做什么。
其次,在为所有按钮编写自定义绘制事件之前,我会考虑使用Qt Style Sheets并使用类似CSS的语法来设置小部件的样式。这将允许您以非常灵活的方式快速更改GUI的外观。根据您的屏幕截图,我认为您可以比继承和滚动自己的设置更快地从样式表中获得您想要的内容。但是再一次,基于一个屏幕截图很难知道。 Here是使用Qt样式表实现的黑暗和橙色GUI的示例。 border-radius
样式表的QPushButton
属性会为您提供圆角按钮(ref)。
答案 1 :(得分:1)
上面给出了一个简单的答案,但是要提出更多的想法:是的,有可能,你可能不需要太多地与Qt作斗争。在大多数情况下,推荐给那些大量定制的小部件的建议是子类,并自己实现paint事件。
然后,您可以使用大量基本绘图基元来获取元素的基本形状并从那里展开。实际上这里有几个问题,关于如何做到这一点非常好。