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. multiple inheritance
Forum Updated to NodeBB v4.3 + New Features

multiple inheritance

Scheduled Pinned Locked Moved Unsolved General and Desktop
13 Posts 5 Posters 963 Views 1 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.
  • N Natural_Bugger

    i would like to add the Thread class to my customButton class

    thread-basics

    custombutton.h file

    #ifndef CUSTOMBUTTON_H
    #define CUSTOMBUTTON_H
    
    #include <QPushButton>
    #include <QThread>
    
    class CustomButton : public QPushButton, public QThread
    {
    public:
        CustomButton( const QString& text, QWidget* parent = 0 );
    
        // Enhancement, it will reverse the button text
        void reverseText();
    private:
        void run();
    };
    
    #endif // CUSTOMBUTTON_H
    
    

    customButton.cpp file

    #include "CustomButton.h"
    #include "algorithm"
    #include <QDebug>
    #include "CustomButton.h"
    #include "algorithm"
    #include <QDebug>
    #include <QApplication>
    
    CustomButton::CustomButton( const QString& text, QWidget* parent )
        : QPushButton( text, parent )
    {
        //this->set
        const QSize btnSize = QSize(150, 150);
        this->setFixedSize(btnSize);
        this->move(1000, 10);
    
    }
    
    void CustomButton::reverseText()
    {
        QString buttonText = text();
        std::reverse(buttonText.begin(), buttonText.end());
        setText( buttonText );
    }
    
    void CustomButton::run(){
        int randomNumber = rand();
        setText(  QString::number(randomNumber) );
    }
    
    

    main.cpp

    .
    ..
    ...
    CustomButton *mybutton = new CustomButton( QString::number(size.width()) + " abc " + QString::number(size.height()));
        mybutton->show();
        mybutton->start(); // <---
        mybutton->reverseText();
    ...
    ..
    .
    

    how do i make random numbers appear on the button every x time?

    if you comment out:

    //mybutton->start();
    

    the "run" method doesn't get executed.

    does the thread class only apply to private methods?

    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by
    #2

    @Natural_Bugger said in multiple inheritance:

    class CustomButton : public QPushButton, public QThread

    How does it make sense to create an object which inherits from a QPushButton and from QThread?

    I do not see any connection. Keep any threading quite separate.

    N 1 Reply Last reply
    2
    • JonBJ JonB

      @Natural_Bugger said in multiple inheritance:

      class CustomButton : public QPushButton, public QThread

      How does it make sense to create an object which inherits from a QPushButton and from QThread?

      I do not see any connection. Keep any threading quite separate.

      N Offline
      N Offline
      Natural_Bugger
      wrote on last edited by
      #3

      @JonB

      well, i wanna try to give that button some properties.
      i need to access the button properties.
      just trying some stuff.

      what do you suggest?

      JonBJ 1 Reply Last reply
      0
      • N Natural_Bugger

        @JonB

        well, i wanna try to give that button some properties.
        i need to access the button properties.
        just trying some stuff.

        what do you suggest?

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #4

        @Natural_Bugger
        It's difficult to know, because I have no idea what you are thinking of conceptually....

        Why are you going anywhere near threads at all? They add a lot of complexity, what use case do you have here for threads?

        how do i make random numbers appear on the button every x time?

        Maybe use a QTimer to change the text on the button over time??

        Or, if you really, really have a thread generating random numbers all the time and you want to display them, use the pattern that the worker thread raises signals with the desired number/text and the main UI thread has a slot for the signal which updates whatever on the UI.

        N 1 Reply Last reply
        0
        • B Offline
          B Offline
          Bonnie
          wrote on last edited by
          #5

          Well, just want to say that multiple inheritance of classes which inherit QObject is not allowed.

          JonBJ 1 Reply Last reply
          2
          • JonBJ JonB

            @Natural_Bugger
            It's difficult to know, because I have no idea what you are thinking of conceptually....

            Why are you going anywhere near threads at all? They add a lot of complexity, what use case do you have here for threads?

            how do i make random numbers appear on the button every x time?

            Maybe use a QTimer to change the text on the button over time??

            Or, if you really, really have a thread generating random numbers all the time and you want to display them, use the pattern that the worker thread raises signals with the desired number/text and the main UI thread has a slot for the signal which updates whatever on the UI.

            N Offline
            N Offline
            Natural_Bugger
            wrote on last edited by
            #6

            @JonB

            i would like to make the button fall at a rate of 9.81 pixels per second and if i lift it up again.
            so my guess: is that my button needs to check autonomously where it resides.

            JonBJ 1 Reply Last reply
            0
            • B Bonnie

              Well, just want to say that multiple inheritance of classes which inherit QObject is not allowed.

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by
              #7

              @Bonnie raises a good point: you cannot inherit twice from anything inheriting from QObject. So you won't get class CustomButton : public QPushButton, public QThread to work anyway, which is just as well! :)

              1 Reply Last reply
              0
              • N Natural_Bugger

                @JonB

                i would like to make the button fall at a rate of 9.81 pixels per second and if i lift it up again.
                so my guess: is that my button needs to check autonomously where it resides.

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by
                #8

                @Natural_Bugger said in multiple inheritance:

                i would like to make the button fall at a rate of 9.81 pixels per second and if i lift it up again.

                Not that I know what this means, but it sounds like you want a 1-second repeating QTimer in which you do some update to the UI?

                N 1 Reply Last reply
                0
                • N Natural_Bugger

                  i would like to add the Thread class to my customButton class

                  thread-basics

                  custombutton.h file

                  #ifndef CUSTOMBUTTON_H
                  #define CUSTOMBUTTON_H
                  
                  #include <QPushButton>
                  #include <QThread>
                  
                  class CustomButton : public QPushButton, public QThread
                  {
                  public:
                      CustomButton( const QString& text, QWidget* parent = 0 );
                  
                      // Enhancement, it will reverse the button text
                      void reverseText();
                  private:
                      void run();
                  };
                  
                  #endif // CUSTOMBUTTON_H
                  
                  

                  customButton.cpp file

                  #include "CustomButton.h"
                  #include "algorithm"
                  #include <QDebug>
                  #include "CustomButton.h"
                  #include "algorithm"
                  #include <QDebug>
                  #include <QApplication>
                  
                  CustomButton::CustomButton( const QString& text, QWidget* parent )
                      : QPushButton( text, parent )
                  {
                      //this->set
                      const QSize btnSize = QSize(150, 150);
                      this->setFixedSize(btnSize);
                      this->move(1000, 10);
                  
                  }
                  
                  void CustomButton::reverseText()
                  {
                      QString buttonText = text();
                      std::reverse(buttonText.begin(), buttonText.end());
                      setText( buttonText );
                  }
                  
                  void CustomButton::run(){
                      int randomNumber = rand();
                      setText(  QString::number(randomNumber) );
                  }
                  
                  

                  main.cpp

                  .
                  ..
                  ...
                  CustomButton *mybutton = new CustomButton( QString::number(size.width()) + " abc " + QString::number(size.height()));
                      mybutton->show();
                      mybutton->start(); // <---
                      mybutton->reverseText();
                  ...
                  ..
                  .
                  

                  how do i make random numbers appear on the button every x time?

                  if you comment out:

                  //mybutton->start();
                  

                  the "run" method doesn't get executed.

                  does the thread class only apply to private methods?

                  J.HilkJ Offline
                  J.HilkJ Offline
                  J.Hilk
                  Moderators
                  wrote on last edited by
                  #9

                  @Natural_Bugger I'm surprised this compiled

                  https://doc.qt.io/qt-5/moc.html#multiple-inheritance-requires-qobject-to-be-first

                  Inheriting from multiple QObjects is not allowed/supported


                  Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                  Q: What's that?
                  A: It's blue light.
                  Q: What does it do?
                  A: It turns blue.

                  N 1 Reply Last reply
                  0
                  • J.HilkJ J.Hilk

                    @Natural_Bugger I'm surprised this compiled

                    https://doc.qt.io/qt-5/moc.html#multiple-inheritance-requires-qobject-to-be-first

                    Inheriting from multiple QObjects is not allowed/supported

                    N Offline
                    N Offline
                    Natural_Bugger
                    wrote on last edited by
                    #10

                    @J-Hilk

                    it actually runs.

                    mybutton->start(); // <---
                    

                    if i comment out "mybutton->start(); // <---", the run function doesn't work, otherwise it does.

                    1 Reply Last reply
                    0
                    • JonBJ JonB

                      @Natural_Bugger said in multiple inheritance:

                      i would like to make the button fall at a rate of 9.81 pixels per second and if i lift it up again.

                      Not that I know what this means, but it sounds like you want a 1-second repeating QTimer in which you do some update to the UI?

                      N Offline
                      N Offline
                      Natural_Bugger
                      wrote on last edited by
                      #11

                      @JonB

                      it's just an experiment.
                      trying to give the button some "life"

                      JonBJ 1 Reply Last reply
                      0
                      • N Natural_Bugger

                        @JonB

                        it's just an experiment.
                        trying to give the button some "life"

                        JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by
                        #12

                        @Natural_Bugger
                        Well, it's the wrong experiment! Conceptually widgets and threads have nothing to do with each other. What's wrong with a QTimer, which sounds like all you are looking for?

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

                          Hi
                          For such animations, you can also use
                          https://doc.qt.io/qt-5/qpropertyanimation.html

                          1 Reply Last reply
                          4

                          • Login

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