查看完整版本: [-- 如何用QGraphicsWidget 实现move的功能? --]

QTCN开发网 -> Qt嵌入式开发 -> 如何用QGraphicsWidget 实现move的功能? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

xiaodong 2009-07-04 23:19

如何用QGraphicsWidget 实现move的功能?

  如题,代码如下
       m_pScene->clear();
        QWidget* widget = new QWidget;
        widget->resize(w,h);
        QGraphicsProxyWidget *proxy = m_pScene->addWidget(widget,Qt::BypassGraphicsProxyWidget | Qt::Window);
        proxy->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
        proxy->setPos(x,y);
        m_pScene->update();
        return ;

按理来说应该可以move了,但是鼠标点上去不能move,谁能帮忙解答一下

xjcook 2009-07-06 11:16
你这样子试试
新建一个item从QGraphicsProxyWidget继承,添加的时候加你重写的这个item
然后要重写这个item的mouseMoveEven,在这个函数内调用QGraphicsItem::mouseMoveEvent,
默认的可能是调用的QGraphicsProxyWidget::mouseMoveEvent,这样的话鼠标事件被widget处理了,item没有取到,所以不会动

你也可以试试创建的widget是一个按钮, QWidget* widget = new QPushButton;
看你鼠标按上去按钮会不会动,如果会动,肯定鼠标事件被按钮处理了,按照上面的方法应该可以。

xiaodong 2009-07-06 23:00
这位兄台,你分析的很有道理啊

不过还是出现了一点小问题,代码如下
void XGraphicsProxyWidget::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
{
    if (event->type() == QEvent::GraphicsSceneMouseMove)
    {
        QGraphicsItem::mouseMoveEvent(event);
        return ;
    }
    QGraphicsProxyWidget::mouseMoveEvent(event);
}


        m_pScene->clear();
        QPushButton* widget = new QPushButton;
//        QWidget *widget = new QWidget;
        XGraphicsProxyWidget *proxy = new XGraphicsProxyWidget();
        proxy->setWidget(widget);
        proxy->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
       m_pScene->addItem(proxy);

这里有个很奇怪的现象是,当用QPushButton时,移动有效,但是控件的颜色看上去很奇怪,是渐变的,不是同一个颜色
但当用QWidget时,移动无效
不知道什么原因

272293199 2011-02-14 09:38
你那个程序是不是有加皮肤效果,QPushButton类的样式被改掉了?

我遇到的问题是QGraphicsWidget 从scene删掉后会留影...不知道为什么...有没有高手赐教

qmail 2011-05-16 16:23
你试下这样创建proxy:
QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget(QGraphicsItem* item);
其参数为已创建的QGraphicsItem类指针

然后proxy->setWidget(QWidget* widget);
其实这个就是个代理窗口
如果QGraphicsItem是可以移动的话
那么proxy指向的窗口也是可以移动的。


查看完整版本: [-- 如何用QGraphicsWidget 实现move的功能? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled