Qt“비공개 슬롯 :”이것은 무엇입니까? 사용하는 방법을 이해하지만 그것의 구문은 나를

나는 그것을 사용하는 방법을 이해하지만 그것의 구문은 나를 괴롭힌다. “비공개 슬롯 :”이란 무엇입니까?

전에 클래스 정의에서 private 키워드와 : 사이에 무언가를 본 적이 없습니다. 여기에 멋진 C ++ 마법이 있습니까?

그리고 여기에 예 :

 #include <QObject>

 class Counter : public QObject
 {
     Q_OBJECT

 public:
     Counter() { m_value = 0; }

     int value() const { return m_value; }

 public slots:
     void setValue(int value);

 ...



답변

슬롯은 C ++의 Qt 특정 확장입니다. Qt의 전처리 기인 MOC (Meta-Object Compiler)를 통해 코드를 전송 한 후에 만 ​​컴파일됩니다. 설명서는 http://doc.qt.io/qt-5/moc.html 을 참조 하십시오 .

편집 : Frank가 지적했듯이 moc는 연결에만 필요합니다. 추가 키워드는 표준 전처리기로 # 정의됩니다.


답변

같은 키워드는 public, privateQt는 슬롯 무시됩니다. 모든 슬롯은 실제로 공용이며 연결할 수 있습니다.


답변

슬롯을 비공개로 선언하면 다른 방법과 마찬가지로 비공개 인 컨텍스트에서 슬롯을 참조 할 수 없습니다. 결과적으로 개인 슬롯 주소를 전달할 수 없습니다.connect .

신호를 private으로 선언하면이 클래스 만 관리 할 수 ​​있지만 함수 멤버 포인터에는 액세스 제한이 없음을 의미합니다 .

class A{
    private:
    void e(){

    }
    public:
    auto getPointer(){
        return &A::e;
    }
};

int main()
{
    A a;
    auto P=a.getPointer();
    (a.*P)();
}

그 외에는 어떤 다른 답변 언급하는 것은 유효 너무 :
– 당신은 여전히 트릭 외부에서 개인 신호와 슬롯을 연결할 수 있습니다
signalsslots빈 매크로하고 언어 표준을 아프게하지 않습니다


답변