Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt WebKit
  4. Isolating an element of a QWebView
Forum Updated to NodeBB v4.3 + New Features

Isolating an element of a QWebView

Scheduled Pinned Locked Moved Qt WebKit
11 Posts 3 Posters 10.1k Views 1 Watching
  • 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.
  • D Offline
    D Offline
    danilocesar
    wrote on last edited by
    #2

    Take a look on "findFirstElement":http://doc.trolltech.com/4.6/qwebframe.html#findFirstElement from "QWebFrame":http://doc.trolltech.com/4.6/qwebpage.html#mainFrame...

    It will return a QWebElement, which is probably what you want.

    <a href="http://www.danilocesar.com">Danilo Cesar Lemes de Paula</a>
    Software Engineer

    1 Reply Last reply
    0
    • D Offline
      D Offline
      danilocesar
      wrote on last edited by
      #3

      @webview->page()->mainFrame()->findFirstElement("#yourID");@

      <a href="http://www.danilocesar.com">Danilo Cesar Lemes de Paula</a>
      Software Engineer

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

        i've tried that, but i can't manage to get the other elements to go away when i want them to, and i can't get it to let me insert it back in.

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

          Well, I've never tried to do that, but you can try "takeFromDocument()":http://doc.trolltech.com/4.6/qwebelement.html#takeFromDocument

          <a href="http://www.danilocesar.com">Danilo Cesar Lemes de Paula</a>
          Software Engineer

          1 Reply Last reply
          0
          • 1 Offline
            1 Offline
            1blah111111
            wrote on last edited by
            #6

            so what would the final peice of code look like that would find an element, clear the document, then put the found element back in? (i've tried and can't seem to get my references right)

            1 Reply Last reply
            0
            • 1 Offline
              1 Offline
              1blah111111
              wrote on last edited by
              #7

              anyone gonna help me at all on this?

              1 Reply Last reply
              0
              • B Offline
                B Offline
                benjamin.poulain
                wrote on last edited by
                #8

                I think they did give you the solution.

                Something like
                @a.takeFromDocument();
                frame->documentElement()->removeAllChildren();
                frame->documentElement()->appendInside(a);@

                I let you figure out the details.

                1 Reply Last reply
                0
                • 1 Offline
                  1 Offline
                  1blah111111
                  wrote on last edited by
                  #9

                  Hopefully what you just gave me will be what i need, (my build machine's ethernet port died :( :( :( :( :( :( :( :( :( :( :( :( :( :( :( so I have to wait till the ethernet card get's get before i can test to see if it works fully) it does at least build without errors after i make a few changes (your -> should be .'s before remove and append) here is the final code i get:

                  @void Widget::on_Login_Main_loadFinished(bool )
                  {
                  QWebFrame *frame = ui->Login_Main->page()->mainFrame();
                  QWebElement loginbox = frame->findFirstElement("#loginbox");
                  loginbox.takeFromDocument();
                  ui->Login_Main->page()->mainFrame()->documentElement().removeAllChildren();
                  ui->Login_Main->page()->mainFrame()->documentElement().appendInside(loginbox);
                  }@

                  btw yes, the class name of the element i'm trying to isolate is loginbox :P huzzah for simple names :P and if you see something wrong with the code please point it out :P I can't build it on this comp because i don't have a flash drive, and this takes about 10 minutes to build the program, (and it's only 1k lines, (it takes this computer about 3 hours to configure Qt for building, it takes my build machine about 3-5 minutes) unfortunately my build machine is linux and this is windows, so i can't build it there burn it to a cd then run it here :P)

                  1 Reply Last reply
                  0
                  • 1 Offline
                    1 Offline
                    1blah111111
                    wrote on last edited by
                    #10

                    ok, i couldn't it to find a specific class, but here is what i did to get it isolated (and please read after the end of the code, because I have a question about how to do something)
                    @void Widget::on_Login_prgrs_valueChanged(int value)
                    {
                    loginprgrs = value;
                    ui->actionLoadchanged->trigger();
                    QWebFrame *frame = ui->Login_Main->page()->mainFrame();
                    QWebElement doc = frame->documentElement();
                    QWebElement head = doc.firstChild();
                    QWebElement body = head.nextSibling();
                    QWebElement div = body.firstChild();
                    QWebElement table = div.nextSibling();
                    QWebElement tbody1 = table.firstChild();
                    QWebElement tr1 = tbody1.firstChild();
                    QWebElement td1 = tr1.firstChild();
                    QWebElement form = td1.firstChild();
                    QWebElement table2 = form.firstChild();
                    QWebElement tbody2 = table2.firstChild();
                    QWebElement tr2 = tbody2.firstChild();
                    QWebElement td2 = tr2.firstChild();
                    QWebElement p = td2.firstChild();
                    QWebElement loginbox = p.nextSibling();
                    QWebElement p2 = loginbox.nextSibling();
                    QWebElement script = p2.nextSibling();
                    QWebElement script2 = script.nextSibling();
                    QWebElement annoyingbanner = script2.nextSibling();

                    annoyingbanner.removeFromDocument();
                    

                    }

                    void Widget::on_Login_Main_loadFinished(bool )
                    {
                    QWebFrame *frame = ui->Login_Main->page()->mainFrame();
                    QWebElement doc = frame->documentElement();
                    QWebElement head = doc.firstChild();
                    QWebElement body = head.nextSibling();
                    QWebElement div = body.firstChild();
                    QWebElement table = div.nextSibling();
                    QWebElement tbody1 = table.firstChild();
                    QWebElement tr1 = tbody1.firstChild();
                    QWebElement td1 = tr1.firstChild();
                    QWebElement form = td1.firstChild();
                    QWebElement table2 = form.firstChild();
                    QWebElement tbody2 = table2.firstChild();
                    QWebElement tr2 = tbody2.firstChild();
                    QWebElement td2 = tr2.firstChild();
                    QWebElement p = td2.firstChild();
                    QWebElement loginbox = p.nextSibling();
                    QWebElement p2 = loginbox.nextSibling();
                    QWebElement script = p2.nextSibling();
                    QWebElement script2 = script.nextSibling();
                    QWebElement noscript = script2.nextSibling();
                    QWebElement br = noscript.nextSibling();
                    QWebElement p3 = br.nextSibling();
                    QWebElement p4 = p3.nextSibling();
                    QWebElement td3 = td2.nextSibling();
                    QWebElement tr3 = tr2.nextSibling();
                    QWebElement div2 = table2.nextSibling();

                    script2.removeFromDocument();
                    script.removeFromDocument();
                    noscript.removeFromDocument();
                    br.removeFromDocument();
                    p3.removeFromDocument();
                    p4.removeFromDocument();
                    p2.removeFromDocument();
                    p.removeFromDocument();
                    td3.removeFromDocument();
                    tr3.removeFromDocument();
                    div2.removeFromDocument();
                    div.removeFromDocument();
                    

                    }@

                    First off, the second set of variable assignments are different because of the fact that by that time the annoying banner element (which takes about 10-20 seconds to load) is no longer there. Second, the url of the page i'm using is,"here":http://magicduel.com/authentication.php

                    The question I have is how would I change the width that is set in the first table element? Because, since I've isolated the login box, it justs adds a scrollbar to my qwebview when it's not really needed.

                    1 Reply Last reply
                    0
                    • 1 Offline
                      1 Offline
                      1blah111111
                      wrote on last edited by
                      #11

                      anyone have any idea how to get it to let me delete the width attribute? (i can't manage to get it to delete that attribute)

                      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