Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Compose pointer to property of object
Forum Updated to NodeBB v4.3 + New Features

Compose pointer to property of object

Scheduled Pinned Locked Moved Solved General and Desktop
c++pointerobjectsproperties
25 Posts 3 Posters 8.4k Views 2 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.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #9

    hi
    If you make this into a fine function that returns a QWebView *, you
    can easy make more than one.

    I do wonder how the parent QWebView(this); << the "this" can
    show mutiple QWebView ?
    will you use a tab control or a stackedwidetget to allow user to flip between the
    WEbViews or ill the be in same page and just take a smaller share of it ?
    as in share the page/parent ?

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

      'This' might be one of my problems.
      While in Designer I had a centralWidget as parent for all my elements.
      The webGUI's are dynamically loaded with content from a local server and are shown/hidden as needed. They also are placed and sized as needed at run-time and cover all of the screen or or only parts, may overlap with transparency ...
      There is at least one, but should now be extendable on request.

      Am I correct that I will need to create webView01 from the constructor at startup and make it available in *.h. Otherwise all the references to it are not satisfied.

      All references/calls to any webGui need to make use pof the QList, right.

      As you may surely have noted, I never implemented such a logic/functionality before.
      Thanks a lot for your help and guidance!

      mrjjM 1 Reply Last reply
      0
      • McLionM McLion

        'This' might be one of my problems.
        While in Designer I had a centralWidget as parent for all my elements.
        The webGUI's are dynamically loaded with content from a local server and are shown/hidden as needed. They also are placed and sized as needed at run-time and cover all of the screen or or only parts, may overlap with transparency ...
        There is at least one, but should now be extendable on request.

        Am I correct that I will need to create webView01 from the constructor at startup and make it available in *.h. Otherwise all the references to it are not satisfied.

        All references/calls to any webGui need to make use pof the QList, right.

        As you may surely have noted, I never implemented such a logic/functionality before.
        Thanks a lot for your help and guidance!

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #11

        @McLion said:

        • 'This' might be one of my problems.
          Well "this" is just the parent. if no parent are giving, it will become a window.
          So often this will be mainwindow. There nothing wrong having mutiple
          WebViews in same parent but u might need to arrange them to not overlap.
          (use move or setGeometry) Since it sounds you will arrange them manually and not use a layout or tabs or something like that.

        • Am I correct that I will need to create webView01 from the constructor at startup and make it available in *.h. Otherwise all the references to it are not satisfied.
          Well you dont need that.
          You can have list
          QList< QWebView *> Webs;
          QWebView *webGUI = new QWebView(this);
          ...
          Webs.append(webGUI); // keep in list

        Then at any time
        QWebView *w = Webs[0]; // take from list
        or Webs[1] , 2,3,4 etc.

        So you dont need a named variable to access it.

        Also, handling signals. You a can use same slot for all webviews.
        the sender() function will tell you which webview
        QWebView * wv= qobject_cast<QWebView *>(sender());
        if (wv) ...
        inside the slot for a signal to know which of the webviews that send the signal.
        Not sure you will need it, so just a note :)

        1 Reply Last reply
        1
        • McLionM Offline
          McLionM Offline
          McLion
          wrote on last edited by McLion
          #12

          Getting forward :-)
          The hint with the sender in the signal was great too. As if you would know before, I really stumbled over this - thanks!

          I came across an issue with the list though.
          There are no absolute positions in the list. Saying if 3 entries are made (0,1,2) and the second list (1) is cancelled for instance because it's not needed anymore, former entry 2 becomes entry 1.
          QList seems to always fill from the 0 up and there are no absolute positions.

          I either did not get all of QList or I may need to switch to some other solution - unfortunately- because it otherwise works a treat.

          1 Reply Last reply
          0
          • mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by mrjj
            #13

            hi
            Im not sure what wrong with QList since its dynamic and
            we cant have invalid pointers around ?
            else use a map
            http://doc.qt.io/qt-5/qmap.html
            QMap<int,QWebView * > map;
            QWebView *webGUI = new QWebView(this);
            ...
            map[1] =webGUI ;
            map[2] =nextwebGUI ;
            ...
            QWebView *w=map[2]; // it will stay "2"

            They wont change position as 1,2 is a key
            like map["onekey"] =webGUI ;
            but we use int as no need for string.
            so even if we remove map[1] then
            map[2] is still there.

            So maybe it works better for you ?

            1 Reply Last reply
            1
            • McLionM Offline
              McLionM Offline
              McLion
              wrote on last edited by
              #14

              Tried quickly ... and the Map is exactly what I need.
              Thanks a million! .... I'll be back ;-)

              mrjjM 1 Reply Last reply
              0
              • McLionM McLion

                Tried quickly ... and the Map is exactly what I need.
                Thanks a million! .... I'll be back ;-)

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #15

                @McLion
                super
                notice if you reuse the key
                map[1] =webGUI ;
                map[1] =nextwebGUI ;
                It will replace the web *.

                1 Reply Last reply
                0
                • McLionM Offline
                  McLionM Offline
                  McLion
                  wrote on last edited by
                  #16

                  Thanks for the heads-up.
                  I'll do some testing and experiment.

                  1 Reply Last reply
                  0
                  • McLionM Offline
                    McLionM Offline
                    McLion
                    wrote on last edited by
                    #17

                    So far, everything related to this threads question and the QMap as solution seems to work.

                    I stumbled over something else while relacing the QwebView from the Designer by my 'on-demand' created one:
                    I can not load an url, it crashes with sig11.

                    I get the following connect error on bootup:

                    QMetaObject::connectSlotsByName: No matching signal for on_webGUI_loadFinished(bool)
                    

                    which I dont understand and may be the cause.
                    I have connected:

                    connect(webGUI, SIGNAL(loadFinished(bool)), this, SLOT(on_webGUI_loadFinished(bool)));
                    

                    and in *.h as private slot:

                    void on_webGUI_loadFinished(bool arg1);
                    

                    This worked before, with the QWebView from the Designer.
                    Any idea? Thanks.

                    1 Reply Last reply
                    0
                    • mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #18

                      @McLion said:

                      no matching signal for on_webGUI_loadFinished(bool)

                      Hi
                      this warning comes as you name slot on_XXX
                      This will trigger Qt auto connect feature so when you use
                      a concrete connect you should rename it so it dont
                      start with on__
                      (right click it- refactor->rename)

                      also please do
                      qDebug() << "loadfin:" << connect(webGUI, SIGNAL(loadFinixxxx

                      to see if it returns true; ( as in , it can connect)

                      1 Reply Last reply
                      1
                      • McLionM Offline
                        McLionM Offline
                        McLion
                        wrote on last edited by
                        #19

                        I wasn't aware that using on_ in the name will trigger any functionality!
                        Refactoring solved this problem - Thanks !

                        However, the signal 11 crash when trying to load an url seems to have some other cause .... I'm searching ;-)

                        1 Reply Last reply
                        0
                        • jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #20

                          You're most probably dereferencing a null pointer. Signal 11 means SIGSEGV (segmentation error).

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          McLionM 1 Reply Last reply
                          0
                          • jsulmJ jsulm

                            You're most probably dereferencing a null pointer. Signal 11 means SIGSEGV (segmentation error).

                            McLionM Offline
                            McLionM Offline
                            McLion
                            wrote on last edited by
                            #21

                            @jsulm
                            Yes - Thanks . Problem loacted, but not yet solved:

                            void QTGUI_MainWindow::populateJavaScriptWindowObject()
                            {
                              QWebView * webGUI = qobject_cast<QWebView *>(sender());
                              webGUI->page()->mainFrame()->addToJavaScriptWindowObject("NativeBridge", this);
                            }
                            

                            The sender is the JS and not the QWebView and so I do not get the pointer to the QWebView that I need. Instead, the pointer is 0x0 and then - of course - the addToJ... crashes.

                            Any idea how I get the pointer to the QWebView from which the JS is sending?
                            Thanks

                            1 Reply Last reply
                            0
                            • jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by
                              #22

                              What is JS?

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              McLionM 1 Reply Last reply
                              0
                              • jsulmJ jsulm

                                What is JS?

                                McLionM Offline
                                McLionM Offline
                                McLion
                                wrote on last edited by
                                #23

                                @jsulm
                                JavaScript (in/from QWebKit ... more precise page()->mainFrame().

                                1 Reply Last reply
                                0
                                • McLionM Offline
                                  McLionM Offline
                                  McLion
                                  wrote on last edited by
                                  #24

                                  I posted this as a separate question in the WebKit group.

                                  1 Reply Last reply
                                  0
                                  • McLionM Offline
                                    McLionM Offline
                                    McLion
                                    wrote on last edited by
                                    #25

                                    Got it solved :-)

                                    QWebFrame * webGUIframe = qobject_cast<QWebFrame >(sender());
                                    QWebView * webGUI = (QWebView
                                    )(webGUIframe->parent())->parent();
                                    webGUI->page()->mainFrame()->addToJavaScriptWindowObject("NativeBridge", this);

                                    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