2011-08-05 3 views
2

신호/슬롯 옵션을 통해 두 위젯을 연결하려고하는데 '슬롯이 없습니다'라는 오류가 계속 발생합니다. 사실 저는 프로그램을 작성하는 동안 Ctrl + Space를 사용하여 오타를 만들지 않았 음을 확인했습니다.'슬롯이 없습니다'Qt

그래서 하나의 위젯이 있습니다

renderArea.h을

 

    class renderArea : public QGraphicsView 
    { 
     Q_OBJECT 
    public: 
     renderArea(QWidget *parent = 0); 

    void addClothoid(float length, float startCurvature, float endCurvature); 

    signals: 
     void sendData(float length, float startCurvature, float endCurvature); 

    }; 

renderArea.cpp

 

    void renderArea::addClothoid(float length, float startCurvature, float endCurvature) 
    { 
     ... 

      emit sendData(length, startCurvature, endCurvature); 
     } 
    } 

2 위젯 :

tableViewList.h

 

    class TableViewList: public QTableView 
    { 
     Q_OBJECT 

    public: 
     TableViewList(QWidget* parent = 0); 

    protected slots: 
     void onClothoidAdded(float length, float startCurvature, float endCurvature); 
    }; 

i가 2 위 연결

renderingwidget.cpp : 516,

tableViewList.cpp

 

    void TableViewList::onClothoidAdded(float length, float startCurvature, float endCurvature) 
    { 

    ... 
    } 

메인 위젯

 

    renderingWidget::renderingWidget(QWidget *parent) : 
      QWidget(parent), 
      ui(new Ui::renderingWidget) 
    { 
     ui->setupUi(this); 

    connect(ui->graphicsView, SIGNAL(sendData(float,float,float)), ui->clothoidTable, 
       SLOT(onClothoidAdded(float,float,float))); 
    } 

UI-> graphicsView가 renderArea 승격되었으며 TableViewList에 대한 clothoidTable.

그럼 왜이 오류가 나타날 수 있습니까?

답변

3

신호/슬롯을 클래스에 추가 한 후에 프로젝트 파일을 다시 생성 했습니까? 빌드 시스템에 따라 이것은 일을 이루는데 필요합니다.

Qt는 신호/슬롯 비헤이비어 (MOC 컴파일러를 사용하는 신호/슬롯의 경우)를 구현하는 추가 코드를 생성하기 위해 클래스 헤더를 사전 처리해야합니다 (cpp 파일에서 스캔하지 않음). Qt가 클래스 X가 신호 나 슬롯을 가지고 있다는 것을 알지 못한다면, 그 클래스에 대한 메타 정보를 생성하지 않을 것입니다.

프로젝트 파일/Make 파일을 다시 생성합니다. Qt가 모든 파일을 다시 검색하고 MOC 컴파일러에 필요한 명령을 생성합니다.

+0

예 ... 시도했지만 여전히 작동하지 않습니다. – schmimona

+0

생성 된 파일을 moc로 검사하여 슬롯이 생성되는지 확인 했습니까? 어쩌면 모든 임시 파일을 삭제해도 도움이 될 것입니다. (잠시 캐싱 문제가 있음을 기억합니다.) – KPK

+0

모든 메이크 파일을 검사했는데 그 중 하나에 내 슬롯에 대한 언급이 없습니다. – schmimona

1

슬롯이 보호되어있어 renderingWidget에 보이지 않습니다. TableViewList 외부에서 연결을 설정하려면 공개로 설정해야합니다.

관련 문제