Hi Skylark

Skylark wrote:
> 
> You have to use osgViewer::InteractiveImageHandler in order for your 
> QWidgetImage to get events and forward them to the underlying Qt 
> widgets. See the osgQtWidgets example for guidance.
> 

I do it, I'm using osgQtWidgets example as base code...


Code:
osg::ref_ptr<osgQt::QWebViewImage> image = new osgQt::QWebViewImage();

            if (arguments.argc()>1) image->navigateTo((arguments[1]));
            else image->navigateTo("http://www.youtube.com/";);

            osgWidget::GeometryHints hints(osg::Vec3(0.0f,0.0f,0.0f),
                                           osg::Vec3(1.0f,0.0f,0.0f),
                                           osg::Vec3(0.0f,0.0f,1.0f),
                                           osg::Vec4(1.0f,1.0f,1.0f,1.0f),
                                           
osgWidget::GeometryHints::RESIZE_HEIGHT_TO_MAINTAINCE_ASPECT_RATIO);

            osg::ref_ptr<osgWidget::Browser> browser = new osgWidget::Browser;
            browser->assign(image.get(), hints);

            root->addChild(browser.get());
            
            QWidget* widget = new QWidget;
            widget->setLayout(new QVBoxLayout);

            MyAdressWidget* adressWidget = new MyAdressWidget(new 
QWidget(),"Refresh",image);
            widget->layout()->addWidget(adressWidget);

            QGraphicsScene* graphicsScene = 0;

            osg::ref_ptr<osgQt::QWidgetImage> widgetImage = new 
osgQt::QWidgetImage(widget);
            
widgetImage->getQWidget()->setAttribute(Qt::WA_TranslucentBackground);
            
widgetImage->getQGraphicsViewAdapter()->setBackgroundColor(QColor(0, 0, 0, 0));
            widgetImage->getQGraphicsViewAdapter()->resize(800, 800);
            graphicsScene = 
widgetImage->getQGraphicsViewAdapter()->getQGraphicsScene();

            osg::Camera* camera = 0;        // Will stay NULL in the inScene 
case.
            osg::Geometry* quad = 
osg::createTexturedQuadGeometry(osg::Vec3(0,0,0), osg::Vec3(1,0,0), 
osg::Vec3(0,1,0), 1, 1);
            osg::Geode* geode = new osg::Geode;
            geode->addDrawable(quad);

            osg::MatrixTransform* mt = new osg::MatrixTransform;
            osg::Matrix mat(osg::Matrix::rotate(osg::Vec3(0,1,0), 
osg::Vec3(0,0,1)));
            mat.postMultTranslate(osg::Vec3f(0.0,0.0,0.3));
            mt->setMatrix(mat);
            mt->addChild(geode);
            mt->getOrCreateStateSet()->setMode(GL_LIGHTING, 
osg::StateAttribute::OFF);
            mt->getOrCreateStateSet()->setMode(GL_BLEND, 
osg::StateAttribute::ON);
            
mt->getOrCreateStateSet()->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
            mt->getOrCreateStateSet()->setAttribute(new osg::Program);

            osg::Texture2D* texture = new osg::Texture2D(widgetImage.get());
            texture->setResizeNonPowerOfTwoHint(false);
            texture->setFilter(osg::Texture::MIN_FILTER,osg::Texture::LINEAR);
            texture->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE);
            texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
            mt->getOrCreateStateSet()->setTextureAttributeAndModes(0, texture, 
osg::StateAttribute::ON);

            osg::Group* overlay = new osg::Group;
            overlay->addChild(mt);

            root->addChild(overlay);

            osgViewer::InteractiveImageHandler* handler = new 
osgViewer::InteractiveImageHandler(widgetImage.get(), texture, camera);
            quad->setEventCallback(handler);
            quad->setCullCallback(handler);


[Image: http://img101.imageshack.us/img101/177/qtinosg.jpg ]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=34878#34878





_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to