2017-12-03 9 views
-1

버튼을 클릭 할 때 함수를 호출하고 싶습니다. 버튼의 구현은 추상 클래스에 있습니다. 하지만 내가 컴파일 할 때이 오류가 발생합니다.추상 클래스에서 버튼 신호를 호출 할 수 없습니다.

는 기본 클래스의 내 .H 파일

#ifndef HOME_H 
#define HOME_H 
#include<QGraphicsScene> 
#include <QGraphicsScene> 
#include<QPushButton> 

class home 
{ 
    Q_OBJECT 
public: 
    home(); 

    virtual void set_home_background()=0 ; 
    QGraphicsScene *scene3; 
    QPushButton *button3; 

private slots: 
    virtual void startgame1(); 
}; 

#endif // HOME_H 

이 기본 클래스

#include "home.h" 
#include<QGraphicsScene> 
#include<QGraphicsProxyWidget> 
#include "QMessageBox" 

home::home() 
{ 

} 

void home::set_home_background() 
{ 
    button3 = new QPushButton; 
    QObject::connect(button3,SIGNAL(clicked()),this,SLOT(startgame1())); 
    QGraphicsProxyWidget *proxy = this->scene3->addWidget(button3); 
    button3->setAutoFillBackground(true); 
    button3->setIcon(QIcon(":/Images/ng.png")); 
    button3->setIconSize(QSize(131,41)); 
    proxy->setPos(130,430); 
    scene3->addItem(proxy); 
} 

void home::startgame1() 
{ 
    QMessageBox q; 
    q.setText(""); 
    q.exec(); 
} 

나는이 오류

C:\Users\User\Documents\breakout_final\home.cpp:16: error: no matching function for call to 'QObject::connect(QPushButton*&, const char*, home*, const char*)' QObject::connect(button3,SIGNAL(clicked()),this,SLOT(startgame1()));

                ^
+0

QObjcet에서 파생해야합니다. –

답변

0

당신을 얻고있다 이것은 코드에 오류가 있습니다 : Qt signa를 사용하려면 ls 및 슬롯을 사용하는 경우 클래스를 QObject에서 상속해야합니다. Q_OBJECT 선언 자체로는 충분하지 않습니다.

#include <QObject> 

class home : public QObject 
{ 
    Q_OBJECT 
public: 
    home(); 


    virtual void set_home_background()=0 ; 
    QGraphicsScene *scene3; 
    QPushButton *button3; 

private slots: 
    virtual void startgame1();  
};