当前位置: 代码迷 >> QT开发 >> 基于图形视图框架遇到的一些列有关问题
  详细解决方案

基于图形视图框架遇到的一些列有关问题

热度:67   发布时间:2016-04-25 03:35:37.0
基于图形视图框架遇到的一些列问题
我写的一个小程序,仿照Qt的例子里面的padnavigator这样一个旋转面板的效果

现在又两个问题,(1)在场景中我还嵌入式了一个自制的标题栏的窗口,使用QGraphicsProxyWidget类嵌入这个窗体,可是原本根据鼠标点击事件点击标题栏可以移动窗口却不行了,程序就死掉了,我调试了下是一个什么信号错误,原本在 QWidget体系里面是可用的,是因为在场景视图中信号传递不一样出问题了吗?有经验的能详解下吗?
(2)就是在图形视图框架中的使用布局管理器的,我因为就2个大窗体,我就用设置固定位置来布局,中间我也尝试了下QGraphicsView中的布局管理器,不过它好像都是针对QGraphicsWidget,QGraphicsItem或者是自己继承改造的类用了提示错误,我看了帮助文档是用这个QGraphicsLayoutItem去自己弄可以被布局管理器管理的对象吗? 请问这种混合的,如果窗体比较多要怎么使用布局管理,有详细介绍的例子吗?

------解决方案--------------------
鼠标移动,应该放到mouseMoveEvent中实现,
------解决方案--------------------
引用:
Quote: 引用:

你要移动的是主窗口吗?如果是,这么操作:

1,如果你的主窗口是QGraphicsView对象,那么通过QGraphicsProxyWidget代理对象可以获得QGraphicsView对象,应该用这个QGraphicsView对象的move函数实现整个窗体的移动。

2,如果你的QGraphicsView对象是放在另外一个widget或者什么窗口上,那么你应该获得主窗口对象的指针,然后调用主窗口对象的move函数。

另外关于你的代码“QWidget *widget=this->parentWidget();”,由于QGraphicsProxyWidget代理对象不会自动有parentWidget,除非你指定,那么该函数会返回空指针0,调用0只想的move函数程序肯定会挂掉。而且这个parentWidget函数返回的widget,根本就不是QWidget指针,而是QGraphicsWidget指针,他们两者之间是有本质区别的。

就是第一种情况,现在我该用什么办法获取QGraphicsView对象呢?


移动view的代码应该是在处理QGraphicsProxyWidget代理对象的鼠标移动事件函数中,应该是:
(this->scene()->views())[0]->move(x, y);
其中scene函数返回QGraphicsProxyWidget代理对象所在的场景,views函数返回所有正在显示该场景的view的指针序列(因为同一个scene可以同时被多个view显示),我想你应该只在一个view中显示你的scene,所以[0]表示取指向第一个显示scene的view的指针,最后move函数表示移动这个view,其中的x,y就是你想要它移动到的位置。语法上可能要再加括号,我没有实际试,你试试看。方法应该是这样的。
  相关解决方案