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. Direct drawing on UI
Forum Updated to NodeBB v4.3 + New Features

Direct drawing on UI

Scheduled Pinned Locked Moved Solved General and Desktop
17 Posts 3 Posters 5.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.
  • MiklM Mikl

    Hi

    And it is fast enough?

    I mean it will not take my RGB, convert it to Image, when to Pixmap, when use slow OS methods to display,....

    The reason i asking, similar way in .NET is terribly slow.

    Update:
    Some more questions:
    -Can i pass my image (RGB data in a memory) to paintEvent(QPaintEvent *)?
    -Can it be inside of QPaintEvent?
    -How to pass it? Something like this: videoFrame->update(RGBPointer)?
    -Pass image using global variable?

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

    @Mikl
    hi
    sorry just saw the question about painting outside of event.
    You should use opengl :) The sample to draw on pixmap will have way to much overhead.

    -Can i pass my image (RGB data in a memory) to paintEvent(QPaintEvent *)?
    No, it has fixed signature so u cant change it. (adding the param)

    -Can it be inside of QPaintEvent?
    yes. should not be an issue

    -How to pass it? Something like this: videoFrame->update(RGBPointer)?
    Really depends on what format you get from camera.

    -Pass image using global variable?
    nope. never really a reason to use globals.
    since you might create your own widget , you can just add a function
    to assign/share the data from the source.

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

      Hi

      -I like the way to draw on opengl. Should be 'fast'. But will i meet capability problem? it will run on Win AND Linux?
      Can you point me to the example, please?

      -Pass image using global variable?
      never was thinking about it. just looking for solution

      -Can i pass my image (RGB data in a memory) to paintEvent(QPaintEvent *)?
      -Can it be inside of QPaintEvent?
      -How to pass it? Something like this: videoFrame->update(RGBPointer)?
      From camera i have raw 24bit RGB data.
      If it is not possible to pass my data to paintEvent(QPaintEvent *) how can i get it? Even if it is inside of QPaintEvent. Not really see how to do it. I will start something. Correct/add me please.

      main()
      {
      char* RGBData = new char[frame size];//data from camera
      
      videoFrame = new VideoFrameWidget();
      videoFrame->update(RGBData);
      }
      
      class VideoFrameWidget : public QWidget
      {
      	Q_OBJECT
      public:
      	VideoFrameWidget(QWidget *parent);
      	virtual void paintEvent(QPaintEvent *);
      };
      
      void VideoFrameWidget::paintEvent(QPaintEvent *data)
      {
      //use opengl to draw image from data
      }
      
      1 Reply Last reply
      0
      • mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #8

        hi
        why cant RGBData just live in VideoFrameWidget ?
        so you dont need to give it from main. ?

        but else u just use functions to give it to the widget.

        MiklM 1 Reply Last reply
        0
        • mrjjM mrjj

          hi
          why cant RGBData just live in VideoFrameWidget ?
          so you dont need to give it from main. ?

          but else u just use functions to give it to the widget.

          MiklM Offline
          MiklM Offline
          Mikl
          wrote on last edited by
          #9

          @mrjj

          It can, but i found it not logic. it is coming from the camera.
          It was simplification of main. In a reality it will be a loop.

          If i understood you correctly, you propose to do it like this:

          main()
          {
           char* RGBData;//data from camera
           VideoFrameWidget videoFrame = new VideoFrameWidget();
           CameraDevice videoSource = new CameraDevice ();
          
           for(;;)
           {
            RGBData = videoSource->getFrame();
            videoFrame->setFrame(RGBData);
            videoFrame->update();
           }
          }
          
          class VideoFrameWidget : public QWidget
          {
              Q_OBJECT
          public:
              VideoFrameWidget(QWidget *parent);
              virtual void paintEvent(QPaintEvent *);
              void setFrame(char* newFrameData);
          private:
           char* frameData;
          };
          
          void VideoFrameWidget::paintEvent(QPaintEvent*)
          {
          //use opengl to draw image from frameData 
          }
          
           void VideoFrameWidget::setFrame(char* newFrameData)
          {
           frameData = newFrameData;
          }
          
          1 Reply Last reply
          0
          • mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #10

            yes exactly and then u can use
            char* frameData;
            in paintEvent

            MiklM 1 Reply Last reply
            0
            • mrjjM mrjj

              yes exactly and then u can use
              char* frameData;
              in paintEvent

              MiklM Offline
              MiklM Offline
              Mikl
              wrote on last edited by
              #11

              @mrjj

              But i still have a question of realization of paintEvent :)

              Can you give me a hand, please

              mrjjM 1 Reply Last reply
              0
              • MiklM Mikl

                @mrjj

                But i still have a question of realization of paintEvent :)

                Can you give me a hand, please

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

                @Mikl
                hii . super :)
                im not good with opengl so better ask @Wieland
                or anyone using it often. :)

                1 Reply Last reply
                0
                • MiklM Offline
                  MiklM Offline
                  Mikl
                  wrote on last edited by
                  #13

                  @mrjj
                  Thank you for helping

                  @Wieland
                  Can i ask for help with my problem please?
                  I need to display raw RGB on a screen in a fastest way.

                  mrjjM 1 Reply Last reply
                  0
                  • MiklM Mikl

                    @mrjj
                    Thank you for helping

                    @Wieland
                    Can i ask for help with my problem please?
                    I need to display raw RGB on a screen in a fastest way.

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

                    @Mikl
                    note, this is user run forum.
                    so he might first be on in the evening.
                    :)

                    MiklM 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      @Mikl
                      note, this is user run forum.
                      so he might first be on in the evening.
                      :)

                      MiklM Offline
                      MiklM Offline
                      Mikl
                      wrote on last edited by Mikl
                      #15

                      @mrjj
                      Ok. Thanks.

                      For me it is looks strange, but reading this example
                      http://doc.qt.io/qt-5/qtopengl-2dpainting-example.html
                      i found, what the only different is using GLWidget as base class.
                      All painting is done by the same QPainter.

                      Am i right?

                      If it is so, task can be really simple.
                      Maybe you know the fastest way to paint from RGB raw data on widget: draw line by line, pixel by pixel, memcopy,....

                      mrjjM ? 2 Replies Last reply
                      0
                      • MiklM Mikl

                        @mrjj
                        Ok. Thanks.

                        For me it is looks strange, but reading this example
                        http://doc.qt.io/qt-5/qtopengl-2dpainting-example.html
                        i found, what the only different is using GLWidget as base class.
                        All painting is done by the same QPainter.

                        Am i right?

                        If it is so, task can be really simple.
                        Maybe you know the fastest way to paint from RGB raw data on widget: draw line by line, pixel by pixel, memcopy,....

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

                        @Mikl
                        Yes as far as i know its VERY similar to
                        normal widget drawing even when opengl.
                        (when 2d)

                        well, the sample i have seen , used something like
                        uchar* data = getDataFromSomewhere();
                        QImage img(data, width, height, QImage::Format_ARGB32);
                        and then convert ot pixmap and draw.
                        or directly into pixmap with
                        http://doc.qt.io/qt-4.8/qpixmap.html#loadFromData

                        1 Reply Last reply
                        0
                        • MiklM Mikl

                          @mrjj
                          Ok. Thanks.

                          For me it is looks strange, but reading this example
                          http://doc.qt.io/qt-5/qtopengl-2dpainting-example.html
                          i found, what the only different is using GLWidget as base class.
                          All painting is done by the same QPainter.

                          Am i right?

                          If it is so, task can be really simple.
                          Maybe you know the fastest way to paint from RGB raw data on widget: draw line by line, pixel by pixel, memcopy,....

                          ? Offline
                          ? Offline
                          A Former User
                          wrote on last edited by
                          #17

                          @Mikl said:

                          For me it is looks strange, but reading this example
                          http://doc.qt.io/qt-5/qtopengl-2dpainting-example.html
                          i found, what the only different is using GLWidget as base class.
                          All painting is done by the same QPainter.

                          Am i right?

                          Hi! Yes, getting 2D hardware acceleration for QPainter is really easy :)

                          1 Reply Last reply
                          2

                          • Login

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