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. Creating a keypress signal from application button
Forum Updated to NodeBB v4.3 + New Features

Creating a keypress signal from application button

Scheduled Pinned Locked Moved General and Desktop
34 Posts 4 Posters 36.5k 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.
  • L Offline
    L Offline
    ludde
    wrote on 14 Sept 2011, 19:10 last edited by
    #11

    No offence, but it looks like you might need to learn some basic C++ to actually get that to work... :)

    Yes, what you need to do is something like the above, but not quite. You need a constructor for your class, and you need to declare your slot as a public slot. And you've got the inheritance order the wrong way around. You should be able to find out how to subclass a Qt widget class from some example. I'd say at least 50% of writing a Qt application is about subclassing existing Qt classes, so it's a good idea to learn how to do that properly.

    1 Reply Last reply
    0
    • M Offline
      M Offline
      maxmotor
      wrote on 14 Sept 2011, 20:45 last edited by
      #12

      Hm your right ludde. From the looks of it I do indeed need to learn some basic C++. My attempt at writing some code failed miserably. I don't know what I was thinking.

      Do I dare to try again? :)

      I will try to explain my overall structure. So please bear with me.

      I have a Parent_ui class which inherits from QWidget. This Parent_ui holds some basic setup of my windows. This is inherited in all my ui's in order to setup the same window size etc. It is in all these ui's I want to implement something to handle a press of a GUI button (Must function the same way as if I use the arrow keys on my keyboard).

      Okay, so in order to achieve my goal, I also need to inherit QTableView in my Parent_ui (Multiple inheritance)?

      I see that QTableView inherits (not all functions) from QWidget. Does this mean I can just entirely delete QWidget as my parent/base class and use the QTableView instead?

      I can't think anymore tonight. Too tired. Looking forward to your replies.

      I am very grateful for your time and patience.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        maxmotor
        wrote on 15 Sept 2011, 07:21 last edited by
        #13

        Could this be a possible structure?

        http://imageshack.us/photo/my-images/99/possibleguiprogramstruc.png

        Or would it be possible to subclass both QWidget and QTableView in Parent_ui? I'm having a hard time figuring this out :(

        EDIT: Hm - Just tried creating a separate class for holding my slot like my diagram above shows.

        @void Test_class::keyDownSlot(QTableView widget) {
        widget.moveCursor(QAbstractItemView::MoveDown, Qt::NoModifier);

        }
        @

        I guess I'm still far away from a solution :(

        1 Reply Last reply
        0
        • L Offline
          L Offline
          ludde
          wrote on 15 Sept 2011, 08:00 last edited by
          #14

          I'm sorry, but that picture does not say much to me... Looks like you are using Qt Designer to design your widgets, which is something I have never done (and hopefully never will do :). So someone else will have to help you with that.

          Regarding multiple inheritance, you cannot inherit from two QObject subclasses, so that's not an option.

          I don't know what you are using your QWidgets for, but maybe what you want to do is something like this:

          Create a subclass of QTableView, e.g. MyTableView, which has a couple of new slots moveUp(), moveDown() etc.

          Create a subclass of QWidget, MyWidget that has a layout and contains some buttons and an instance of MyTableView.

          Connect the clicked() signals of the buttons to the corresponding signals in the MyTableView instance, e.g. in the MyWidget constructor.

          Hope this helps.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            maxmotor
            wrote on 15 Sept 2011, 08:12 last edited by
            #15

            Thank you so much ludde!

            What you describe is almost what I sketch in my diagram. The only difference I guess is that I had all my UI's have an instance of my QTableView subclass. Of course it should be MyWidget (In my case Parent_ui) that should have the instance of the QTableView subclass.

            I will try this out!

            Thank you for your time!

            EDIT: Come to think about it, in my case the subclasses of Parent_ui needs the instance of MyTableView. This is because it is here the buttons and QTableView is created.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              maxmotor
              wrote on 15 Sept 2011, 09:51 last edited by
              #16

              I get this error when trying to build:

              error: 'QTableView& QTableView::operator=(const QTableView&)' is private

              The header file of MyTableView looks like this:

              @#include "qtableview.h"

              class MyTableView: public QTableView {

              Q_OBJECT;

              public:
              MyTableView(QWidget* parent = 0);
              virtual ~MyTableView();
              public slots:
              void key_down();
              void key_up();

              };@

              Do I need to change something here? Or does it look right?

              1 Reply Last reply
              0
              • V Offline
                V Offline
                vsorokin
                wrote on 15 Sept 2011, 09:58 last edited by
                #17

                First, not related with your problem things:

                1. ';' not needed after Q_OBJECT - it's macros
                2. 'virtual' keyword for destructor not needed in your class, because it's already defined as virtual in base class.

                Second, your error:
                Can you show line where error was happen?
                For subclasses of QObject assignment operator and copy constructor always are private.

                --
                Vasiliy

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  maxmotor
                  wrote on 15 Sept 2011, 10:12 last edited by
                  #18
                  1. Okay - I'll correct that.
                  2. When I remove the virtual keyword I get a warning:

                  "Class "MyTableView" has virtual method 'qt_metacall' but non-virtual destructor"

                  1. I get the error in line 3 in the code showed in my previous post. I will add the code again, with the changes you mentioned.

                  @#include "qtableview.h"

                  class MyTableView: public QTableView {

                  Q_OBJECT

                  public:
                  MyTableView(QWidget* parent = 0);
                  ~MyTableView();
                  public slots:
                  void key_down();
                  void key_up();

                  };@

                  Thank you for your time.

                  1 Reply Last reply
                  0
                  • V Offline
                    V Offline
                    vsorokin
                    wrote on 15 Sept 2011, 11:45 last edited by
                    #19
                    1. didn't you forget implement destructor body?
                    2. Ok, please, show code line where you create instance of MyTableView class or line where you use this instance as parameter of method

                    --
                    Vasiliy

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      ludde
                      wrote on 15 Sept 2011, 11:52 last edited by
                      #20

                      I think the build error probably has nothing to do with the definition of your MyTableView class, but rather how you use it. Maybe you are using an assignment with a MyTableView object somewhere, where you should really be assigning a pointer?

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        maxmotor
                        wrote on 15 Sept 2011, 11:54 last edited by
                        #21

                        My setup.h file:

                        @#include "ui_setup.h"
                        #include "parent_ui.h"
                        #include "mytableview.h"

                        class Setup: public Parent_ui {
                        Q_OBJECT

                        public:
                        Setup(QWidget *parent = 0);
                        ~Setup();
                        MyTableView myTableViewInstance;

                        private:
                        Ui::SetupClass ui;
                        void createActions();

                        private slots:
                        void up();
                        void down();
                        void enter();
                        void back();

                        };@

                        My setup.cpp file:

                        @#include "setup.h"
                        #include <QListWidget>

                        Setup::Setup(QWidget *parent) :
                        Parent_ui(parent) {

                        ui.setupUi(this);
                        Parent_ui::ui.headerLabel->setText("SETUP");

                        myTableViewInstance = new MyTableView();
                        }

                        Setup::~Setup() {

                        }
                        @

                        The error I get when calling "myTableViewInstance = new MyTableView();":

                        'QWidget' is an inaccessible base of 'MyTableView'

                        1 Reply Last reply
                        0
                        • L Offline
                          L Offline
                          ludde
                          wrote on 15 Sept 2011, 11:57 last edited by
                          #22

                          It's because you are assigning a pointer to an object. myTableViewInstance has to be a pointer.

                          1 Reply Last reply
                          0
                          • V Offline
                            V Offline
                            vsorokin
                            wrote on 15 Sept 2011, 12:08 last edited by
                            #23

                            ludde are right:
                            in your setup.h file
                            @
                            ...
                            MyTableView *myTableViewInstance;
                            ...
                            @

                            --
                            Vasiliy

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              maxmotor
                              wrote on 15 Sept 2011, 12:24 last edited by
                              #24

                              That was it, thank you :)

                              Okay to get back to the subject (Which I slowly turned away from introducing other challenges :) ).

                              I have made a slot in MyTableView:

                              @void MyTableView::key_down(){
                              QTableView::moveCursor(QAbstractItemView::MoveDown, Qt::NoModifier);
                              }@

                              This is then used in my setup.cpp file:

                              @void Setup::createActions() {

                              QObject::connect(ui.buttonTwo, SIGNAL(clicked()), this, SLOT(myTableViewInstance->key_down()));

                              }@

                              This has no effect on my QTableWidget though. But I guess it's me and my coding which is faulty again. Can you see from my code snippets what I'm doing wrong?

                              1 Reply Last reply
                              0
                              • V Offline
                                V Offline
                                vsorokin
                                wrote on 15 Sept 2011, 12:41 last edited by
                                #25

                                @ connect(ui.buttonTwo, SIGNAL(clicked()), myTableViewInstance, SLOT(key_down()));
                                @

                                --
                                Vasiliy

                                1 Reply Last reply
                                0
                                • M Offline
                                  M Offline
                                  maxmotor
                                  wrote on 15 Sept 2011, 12:46 last edited by
                                  #26

                                  I get this error: 'QObject' is an inaccessible base of 'MyTableView'

                                  1 Reply Last reply
                                  0
                                  • V Offline
                                    V Offline
                                    vsorokin
                                    wrote on 15 Sept 2011, 12:55 last edited by
                                    #27

                                    Please show MyTableView constructor implementation

                                    --
                                    Vasiliy

                                    1 Reply Last reply
                                    0
                                    • M Offline
                                      M Offline
                                      maxmotor
                                      wrote on 15 Sept 2011, 12:59 last edited by
                                      #28

                                      It is empty :/

                                      @MyTableView::MyTableView(QWidget* parent) : QTableView(parent){

                                      }@

                                      1 Reply Last reply
                                      0
                                      • V Offline
                                        V Offline
                                        vsorokin
                                        wrote on 15 Sept 2011, 13:07 last edited by
                                        #29

                                        oh... I haven't more ideas :)

                                        Try change
                                        @#include "qtableview.h"@
                                        to

                                        @#include <QTableView>@

                                        if nothing changes, just put all your sources to file hosting and get me link :)

                                        --
                                        Vasiliy

                                        1 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          maxmotor
                                          wrote on 15 Sept 2011, 15:39 last edited by
                                          #30

                                          I have sent you a link :)

                                          1 Reply Last reply
                                          0

                                          20/34

                                          15 Sept 2011, 11:52

                                          • Login

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