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.3k 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
    #4

    hi
    No, you are not allowed to paint outside paintEvent of the widget.
    You can cheat and draw on image and show image though.

    here is small sample of that
    https://www.dropbox.com/s/qwde8lb0fkjrrh3/mycheapgraph.zip?dl=0

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

      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 1 Reply Last reply
      0
      • 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