QToolButton信号和插槽

时间:2017-12-02 12:53:09

标签: c++ qt

我有一个display.cpp类,它有一个应该启动游戏的QToolButton“start”。 我还有一个 singleton controller.cpp类,它创建了一个display.cpp对象,得到了QToolButton“start”的指针。所以现在我尝试将“开始”按钮的单击(bool)SIGNAL连接到我在controller.h中的自定义SLOT,它由于某种原因不起作用。

它确实编译并运行。

这两个类都继承了QObject和Q_Object宏。

//controller.h
public slots:
    void initGame(bool);

//controller.cpp
void Controller::initConnectors(){

    /*create object of Display.cpp*/
    Display *sender = new Display();

    /*getStartButton from display.cpp and connect it*/
    connect(sender->getStartButton(),SIGNAL(clicked(bool)), getControllersInstance() ,SLOT(initGame(bool)));
}

void Controller::initGame(bool a)
{
  std::cout << "Received Signal?" <<std::endl;
}

display.cpp:

/*Button that is used to start the game*/
QToolButton *Display::getStartButton() const
{
return startButton;
}

在main.cpp中:

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow m;
Controller::Create();
Controller * controller = Controller::getControllerInstance();
controller->initConnectors();
m.show();
return app.exec();
}

按下“开始”按钮后,没有任何反应!我测试了display.cpp类本身的“开始”按钮,它运行正常。但是在我将按钮传递给controller.cpp之后,它就不再起作用了!

1 个答案:

答案 0 :(得分:1)

您将广告位声明为int initGame(bool);,但稍后定义void initGame(bool)

我想这是问题的根源。确保使用相同的类型。 如果这不能解决问题,我们需要查看完整的代码。