Volevo sapere se è possibile emettere un segnale specifico attraverso la codifica. Ad esempio, voglio emettere un evento cliccato di un altro pulsante senza che l'utente abbia effettivamente fatto clic su quel pulsante. Posso farlo?Come causare manualmente l'emissione di un segnale di un altro controllo?
risposta
È possibile chiamare la funzione click di questo pulsante. Emetterà il segnale cliccato.
I segnali sono implementati internamente come funzioni membro protette in C++, quindi consiglierei di non farlo. (Sono pubblici in Qt 5, sebbene non sia ancora consigliato come soluzione generale.)
Qt, tramite il moc, implementa la parola chiave emit, che consente di emettere segnali attraverso la codifica.
Se la classe che si sta utilizzando non fornisce un metodo per emettere alcun segnale, è possibile eseguirne la sottoclasse e implementare una funzione autonoma. Ma devo dire che non l'avevo mai fatto per segnali "normali". Lo ha fatto solo quando ho definito i miei segnali in un'estensione di classe.
Invece di emette il segnale da soli e collegandolo allo slot, Perchè non si chiamano slot direttamente? Gli slot sono come le altre funzioni C++, nel senso che puoi chiamarlo direttamente. Non vedo alcun motivo per cui hai emesso un segnale predefinito (come clicked()
). Basta chiamare direttamente lo slot.
ad emettere un segnale basta scrivere
emettono signalName (lista param);
#include <QObject>
class myClass : public QObject
{
Q_OBJECT
public:
myClass (QObject *parent = 0) : QObject(parent) { }
void foo();
signals:
void mySignal(int param);
};
void myClass::foo() { emit mySignal(5); }
saperne di più su http://doc.qt.io/qt-4.8/signalsandslots.html
è anche possibile collegare un segnale ad un altro segnale che consente il collegamento mysignal ai pulsanti cliccato del segnale e quando il segnale è emited il segnale cliccato sarà anche emited vedere http://doc.qt.io/qt-4.8/qobject.html#connect
se si imposta un'azione sul pulsante, è anche possibile chiamare semplicemente l'azione da attivare. Basta usare action_of_the_button->trigger();
!
- 1. Inserimento di un controllo prima di un altro controllo
- 2. C'è un modo per collegare un segnale di boost direttamente ad un altro segnale?
- 3. Spostare un controllo utente all'interno di un altro controllo utente
- 4. È possibile eseguire manualmente un controllo logrotate?
- 5. Come associare la proprietà di un controllo a una proprietà di un altro controllo?
- 6. è possibile ancorare un controllo a un altro controllo?
- 7. Scrittura su un controllo di testo da un altro thread?
- 8. Utilizzare un altro controllo come maschera di opacità in WPF?
- 9. Come verificare se un controllo è figlio di un altro controllo? "Control.IsChildOf"
- 10. Come aggiungere un controllo a un pannello in un modulo da un altro controllo utente
- 11. Come causare deliberatamente un deadlock?
- 12. Come disconnettere un segnale di Gtk?
- 13. Come controllare l'altezza di controllo per l'altezza di un altro controllo?
- 14. Aggiungi valore di controllo prima di un altro valore di controllo in C#
- 15. Aggiungi un controllo su un modulo, da un altro thread
- 16. Istanzia manualmente un DataTemplate?
- 17. Chiamare il metodo di controllo AngularJs da un altro servizio
- 18. Come chiudere un jgrowl manualmente
- 19. Come costruire manualmente un AST?
- 20. Come creare manualmente un tf.Summary()
- 21. Come chiamare un evento manualmente in C#?
- 22. Come creare manualmente un servizio Apache di Windows
- 23. Come si esegue un django TestCase manualmente/contro un altro database?
- 24. Come richiamare manualmente un evento?
- 25. Il controllo di un tipo di classe (.class) è uguale ad un altro tipo di classe
- 26. Come reindirizzare gli eventi del mouse su un altro controllo?
- 27. Come accedere a un controllo di modulo per un altro modulo?
- 28. Come si associa alla proprietà di un altro controllo da un trigger?
- 29. Come causare un deadlock con esito positivo
- 30. Marshall su un thread manualmente
A volte si desidera accedere al mittente() nello slot. Questo non funziona quando si richiama direttamente lo slot – Ben