Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Reference to WebView from C++

Reference to WebView from C++

Scheduled Pinned Locked Moved QML and Qt Quick
5 Posts 3 Posters 6.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Adilek
    wrote on last edited by
    #1

    Hi.

    I make little application using QML and it contains WebView component.

    I want to get the reference to QML object WebView from C++.

    My QML is like this:
    @
    WebView {
    id:webView
    objectName: "adil1234"

            preferredWidth: flick.width
            preferredHeight: flick.height
            renderingEnabled:true
            settings.pluginsEnabled: true
            smooth: true
            contentsScale:1
            pressGrabTime:10
    
            focus:true
            anchors {
                left:parent.left
                right:parent.right
            }
    
            onUrlChanged: {
                flick.contentY = 0
    
    
            }
        }
    }
    

    @

    I get the reference to this object in C++ by such method:
    @
    QUrl source("qrc:res/qml/qmlfile.qml");
    QApplication app(argc, argv);

    app.setApplicationName("salam");
    
    QDeclarativeView view;
    
    view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
    QObject::connect(view.engine(), SIGNAL(quit()), &app, SLOT(quit()));
    
    view.setSource(source);
    view.show();
    
    QObject *object = view.rootObject();
    
    
    QObject *rect = object->findChild<QObject*>("adil1234");
    

    @

    The rect is the reference to this object. It's OK but it's type is QObject. Now I need to call webkit related functions. So I write
    @
    QGraphicsWebView* adil = (QGraphicsWebView*)rect;
    @

    or

    @
    QWebView* adil = (QWebView*)rect;
    @

    When I call any function of adil for example adil->url() application crashes. I think such casting is not OK. In this situation how to get the reference of my webview component and work with it like QWebView.

    Thanks.

    1 Reply Last reply
    0
    • T Offline
      T Offline
      thisisbhaskar
      wrote on last edited by
      #2

      Always do qobject_cast when you do casting a QObject derived class.

      @QObject rect = object->findChild<QObject>("adil1234");@

      now I could see that url is a property of WebView and you should be able to access url property with below code

      @rect->setProperty("url",QVariant("urlpath"));
      QVariant urlpath = rect->property("url");
      QString urlstring = urlpath.toString();
      @

      Try this out and let us know if this works.

      1 Reply Last reply
      0
      • A Offline
        A Offline
        Adilek
        wrote on last edited by
        #3

        Thanks you for your attention.
        For now my purpose is to get the selected text of WebView so to call rect->selectedText();. In this case rect is QObject and it's neat that it has no selectedText() method. QWebView has selectedText() method. How to get the reference of rect as QWebView (or QGraphicsWebView)?

        1 Reply Last reply
        0
        • T Offline
          T Offline
          thisisbhaskar
          wrote on last edited by
          #4

          I doubt you can do that...

          When you execute below code.. dose adil have a valid pointer ( other than zero ) ? My guess is it will be zero
          @QObject rect = object->findChild<QObject>("adil1234");
          QWebView* adil = qobject_cast<QWebView>(rect);@

          You can not call selectedText() on WebView because WebView does not have a method with that name. Suppose if it has, you can call it with

          @QMetaObject::invokeMethod(rect,"selectedText,parameters)@

          1 Reply Last reply
          0
          • D Offline
            D Offline
            djgtram
            wrote on last edited by
            #5

            That's exactly the problem, Vijay.

            I need to call back my C++ code from QML in order to set up a couple of things in the WebView (like setting the background to avoid the background transparency bug on Symbian, disabling the context menu and similar). I do it the usual way, passing the WebView id as an argument from the Component.onCompleted of the WebView in QML.

            C++ accepts and tries to cast it the usual way (the way that works with many other objects, WebView seems to be the exception):

            @void xxx::setup(QObject* browser) {
            QWebView* webBrowser = qobject_cast<QWebView*>(browser);
            qDebug() << browser;
            qDebug() << webBrowser;
            }@

            While browser is a QDeclarativeWebView all right, it can't be cast to a QWebView, webBrowser will be a null QObject instead. Do you have any suggestion?

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved