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
Qt 6.11 is out! See what's new in the release blog

Direct drawing on UI

Scheduled Pinned Locked Moved Solved General and Desktop
17 Posts 3 Posters 8.7k 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