我在将QPushButton中的信号连接到QGraphicsView中的插槽时遇到问题。

我的按钮标题:

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

};


您需要Q_Object宏才能使用插槽对其进行编译,但是当我进行编译时,我会不断得到未找到的vtable引用,如下所示:

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


当我取出宏时,可以很好地进行编译,但是在运行时,我总是收到此错误:

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


我的game_controller扩展了QGRaphicsView,这是我尝试连接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()));


任何帮助将不胜感激

最佳答案

保留Q_OBJECT,moc需要它

不要写信号的主体,moc会为所有信号生成代码。

不处理mousePressedEvent,处理在QAbstractButton及其所有子类上可用的clicked()信号

关于c++ - 将QPushButton信号连接到QGraphicsView插槽时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13653622/

10-09 06:36
查看更多