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 Offline
    MiklM Offline
    Mikl
    wrote on last edited by
    #3

    Hello.
    Thank you for welcoming. Hope i can find my way in QT with your help.

    I had a short a look on it and have some questions

    -Is QOpenGLWidget hardware/software depended?
    -Can i attach QPainter to widget outside of paint event. For example like this:
    QPainter* DrawTool = new QPainter(DrawWidgetName);

    May be you can point me to some examples?

    Thank you in advance.

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