2014-11-15 32 views
6

Voglio usare segnali e slot nel mio programma, ma sfortunatamente dovrebbero essere usati per trasmettere diversi tipi di dati (es. QString, double, ecc.) E non voglio scrivere venti slot diversi solo perché ne ho bisogno uno per ogni tipo di dati. Ma quando voglio dichiarare uno slot comeCome utilizzare i modelli con segnali e slot QT?

template <typename t> 
void Slot1(t data); 

QT mi dice che non è possibile utilizzare i modelli di segnali e slot. C'è una soluzione? Oppure il mio approccio è semplicemente migliorato?

+2

Cosa succede ad usare un 'QVariant'? – sjdowling

+0

Sembra interessante, ma non ne ho mai sentito parlare prima! –

risposta

9

risposta precisa: It is impossible

Soluzione: Si può fare qualcosa di simile con i nuovi segnali e slot sintassi:

QSlider *slid = new QSlider; 
QLineEdit *lne = new QLineEdit; 

connect(slid,&QSlider::valueChanged,this,&MainWindow::random); 
connect(lne,&QLineEdit::textChanged,this,&MainWindow::random); 
lne->show(); 
slid->show(); 

Slot:

void MainWindow::random(QVariant var) 
{ 
    qDebug() << var; 
} 

uscita:

QVariant(int, 11) 
QVariant(int, 12) 
QVariant(int, 13) 
QVariant(int, 14) 
QVariant(int, 16) 
QVariant(QString, "c") 
QVariant(QString, "cv") 
QVariant(QString, "cvb") 
QVariant(QString, "cvbc") 
QVariant(QString, "cvbcv") 

Perché? http://qt-project.org/wiki/New_Signal_Slot_Syntax

Possibilità di lanciare automaticamente i tipi se non v'è implicita di conversione (ad esempio da QString a QVariant)

+1

Questo non risponde affatto alla domanda. :( –

+1

@ Jean-MichaëlCelerier È meglio di una risposta, perché la semplice risposta è "È impossibile" Anche l'OP ha chiesto "C'è una soluzione alternativa o il mio approccio è semplicemente migliorato?" E la mia risposta spiega come ottenere qualcosa di simile al modello http://chernobyllab.blogspot.com/2015/04/how-to-use-templates-with-qt-signals.html – Chernobyl

Problemi correlati