나는 display.cpp 클래스를 가지고 있는데, 게임을 시작해야하는 "start"라는 QToolButton을 가지고 있습니다. 또한 싱글 톤 controller.cpp 클래스가 있는데 display.cpp의 객체를 만들고 get은 QToolButton "start"의 포인터입니다. 그래서 지금 나는 "시작"버튼의 클릭 (부울) 신호를 내 custom SLOT에 controller.h에 연결하려고 시도했지만 어떤 이유로 작동하지 않는다.QToolButton 신호 및 슬롯 - QT
컴파일되고 실행됩니다.
두 클래스 모두 QObject와 Q_Object 매크로를 상속합니다.
display.cpp//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;
}
:
/*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에 버튼을 전달한 후에는 더 이상 작동하지 않습니다!
표시 클래스. – eyllanesc
최신 C++ 및 Qt의 최신 버전; 문자열 기반의 시그널/슬롯 함수와 관련'SIGNAL()'과'SLOT()'매크로를 사용하지 말 것을 권합니다. 대신 컴파일시 검사 된 포인터 - 구성원 함수 구문을 사용하십시오. 여기에는 몇 가지 장점이 있습니다. 오류는 런타임보다는 컴파일 타임에 플래그가 지정되므로 오류를 만들기가 더 어려워 더욱 효율적입니다. 또한; 많은 경우 컴파일을 완료 한 Q_OBJECT 매크로가 필요하지 않습니다. –
우리가 당신을 도울 수 있기를 원하면 [mcve]를 제공해야하며, 현재 코드는 작동시키기 위해 추가 된 요소가 필요합니다. – eyllanesc