[qt] Pasar una discusión a una ranura


Answers

Con Qt 5 y un compilador C ++ 11, la manera idiomática de hacer tales cosas es dar un functor para connect :

connect(action1,  &QAction::triggered, this, [this]{ onStepIncreased(1); });
connect(action5,  &QAction::triggered, this, [this]{ onStepIncreased(5); });
connect(action10, &QAction::triggered, this, [this]{ onStepIncreased(10); });
connect(action25, &QAction::triggered, this, [this]{ onStepIncreased(25); });
connect(action50, &QAction::triggered, this, [this]{ onStepIncreased(50); });

El tercer argumento para connect es nominalmente opcional. Se usa para configurar el contexto del hilo en el que se ejecutará el funtor. Siempre es necesario cuando el funtor utiliza una instancia de QObject . Si el funtor usa múltiples instancias de QObject , deben tener un elemento primario común que administre su tiempo de vida y el programa de ejecución debe referirse a ese elemento primario, o se debe garantizar que los objetos sobrevivan al elemento de ejecución.

En Windows, esto funciona en MSVC2012 y más reciente.

Question

Quiero anular mouseReleaseEvent con un montón de QActions y QMenus ...

connect(action1, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action5, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action10, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action25, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action50, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

Así que quiero pasar una discusión a la ranura en onStepIncreased (como se puede imaginar son 1,5,10,25,50). ¿Sabes cómo puedo hacerlo?




Tal vez pueda subclasificar QAction con una variable de miembro m_increase.
Conecte la señal disparada () a una ranura en su nueva subclase QAction y emita una nueva señal (por ejemplo, desencadenado (número int)) con el parámetro correcto.
p.ej

class MyAction:public QAction  
{  
public:  
    MyAction(int increase, ...)  
        :QAction(...), m_increase(increase)
    {  
        connect(this, SIGNAL(triggered()), this, SLOT(onTriggered()));  
    }  
protected Q_SLOTS:  
    void onTriggered()  
    {  
        emit triggered(m_increase);  
    }  

Q_SIGNALS:
    void triggered(int increase);   

private:  
    int m_increase;  
};



Related