나는 그것을 사용하는 방법을 이해하지만 그것의 구문은 나를 괴롭힌다. “비공개 슬롯 :”이란 무엇입니까?
전에 클래스 정의에서 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
, private
Qt는 슬롯 무시됩니다. 모든 슬롯은 실제로 공용이며 연결할 수 있습니다.
답변
슬롯을 비공개로 선언하면 다른 방법과 마찬가지로 비공개 인 컨텍스트에서 슬롯을 참조 할 수 없습니다. 결과적으로 개인 슬롯 주소를 전달할 수 없습니다.connect
.
신호를 private으로 선언하면이 클래스 만 관리 할 수 있지만 함수 멤버 포인터에는 액세스 제한이 없음을 의미합니다 .
class A{
private:
void e(){
}
public:
auto getPointer(){
return &A::e;
}
};
int main()
{
A a;
auto P=a.getPointer();
(a.*P)();
}
그 외에는 어떤 다른 답변 언급하는 것은 유효 너무 :
– 당신은 여전히 트릭 외부에서 개인 신호와 슬롯을 연결할 수 있습니다
– signals
와 slots
빈 매크로하고 언어 표준을 아프게하지 않습니다