简体   繁体   中英

Trouble Connecting QPushButton Signal to QGraphicsView Slot

I'm having trouble connecting a signal in a QPushButton to a slot in my QGraphicsView .

My Push Button Header:

class Button : public QPushButton {

    Q_OBJECT

    public://public constructors / destructors

        Button(Game_state * game_state, QWidget *parent = 0);
        ~Button();

    protected://signals / slots etc QT 
        void mousePressEvent(QMouseEvent * event);//

    signals:
        void updated() { std::cout << "HELLO FROM THE UPDATED METHOD" << std::endl;}

    protected:
        Game_state * game_state;//this is the global gamestate method
        char * action_name;//this is the application name that is responsible for setting the game_state so the game controller knows what to delete / update

};

You need the Q_Object macro to compile this with slots, but when I compile I keep getting a vtable reference not found like follows:

Undefined symbols for architecture x86_64:
  "vtable for Button", referenced from:
      Button::~Button()in buttons.o
      Button::~Button()in buttons.o
      Button::~Button()in buttons.o
      Button::Button(Game_state*, QWidget*)in buttons.o
      Button::Button(Game_state*, QWidget*)in buttons.o

When I take out the macro, I can compile it fine, but I keep getting this error when I run:

Object::connect: No such signal QPushButton::updated() in implementation/game_controller.cpp:11

My game_controller extends QGRaphicsView and here is my code where I am attempting to connect the Button:

this->button = new Button(game_state);
this->proxy = new QGraphicsProxyWidget();
this->proxy = this->scene->addWidget(this->button);

connect(this->button, SIGNAL(updated()), this, SLOT(update()));

Any help would be greatly appreciated

Keep Q_OBJECT, you need it for moc

Don't write the body of your signal, moc generates code for all signals.

Don't handle mousePressedEvent, handle the signal clicked () which is available on QAbstractButton and all of its child classes

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM