c++ - custom - qt signals and slots tutorial
Qt "tragamonedas privadas:" ¿qué es esto? (3)
Declarar espacios como privados significa que no podrá hacer referencia a ellos desde el contexto en el que son privados, como cualquier otro método. En consecuencia, no podrá pasar la dirección de las máquinas tragamonedas privadas para connect
.
Si declaras que la señal y la ranura son privadas, estás diciendo que solo esta clase puede administrar, pero los punteros de los miembros de la función no tienen restricciones de acceso :
class A{
private:
void e(){
}
public:
auto getPointer(){
return &A::e;
}
};
int main()
{
A a;
auto P=a.getPointer();
(a.*P)();
}
Aparte de eso, lo que otras respuestas mencionan es válido también:
- todavía puedes conectar señales privadas y tragamonedas desde el exterior con trucos
- las signals
y las slots
son macros vacías y no rompen el estándar del lenguaje
Entiendo cómo usarlo, pero la sintaxis me molesta. ¿Qué está haciendo "slots privados"?
Nunca he visto algo entre la palabra clave privada y el: en una definición de clase anterior. ¿Hay alguna magistral magia C ++ aquí?
Y ejemplo aquí:
#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);
...
Las máquinas tragamonedas son una extensión específica de Qt de C ++. Solo se compila después de enviar el código a través del preprocesador de Qt, el Meta-Object Compiler (moc). Ver http://doc.qt.io/qt-5/moc.html para documentación.
Editar: Como señala Frank, el moc solo es necesario para enlazar. Las palabras clave adicionales se definen # con el preprocesador estándar.
Las palabras clave como public
, private
se ignoran para las ranuras Qt. Todas las máquinas tragamonedas son en realidad públicas y se pueden conectar