在工作中,有的界面需求需要实现这个界面的等比例缩放,我在网上查找了好多资料都没有发现很好的解决方案,在一次偶然尝试中,发现了QGraphicsScene 和QGraphicsView 搭配使用,可以让嵌入在它内部的玩意进行缩放,于是我尝试着把我原来主窗口放进去,结果缩放的效果也很好很流畅。
下面展示下效果:
缩放
但是后面发现虽然可以等比例缩放,但也出现了一些问题,关于鼠标事件的,这个最后再说吧,先来看看它是怎么实现的。
首先创建一个widget作为容器,图中的gridlayout_197 是我主窗口的布局,这个根据自己程序中的布局名字来更换,把这个widget的布局设置为该布局。
然后创建QGraphicsScene 和QGraphicsView 对象,然后将这个容器widget添加到scene当中。
之后就是配置view,最后把view设置为我们主窗口的中央窗口部件。
接着在resizeEvent事件中实现缩放的功能
将我们主窗口嵌入这个QGraphicsView之后引发了很多奇奇怪怪的问题,例如鼠标停留在listwidget控件的item上,然后缓慢的移开它的范围,这个item依旧显示着鼠标悬浮在它上方的样式没有回复正常样式。这些问题都是关于鼠标事件的,我猜测是QGraphicsView它内部对鼠标事件的处理影响了原来鼠标事件的传递,后面解决的办法是对mousemove,mousepressed等事件进行重写,然后在里面手动传送事件。