2014-11-15 11 views
6

Chcę używać sygnałów i gniazd w moim programie, ale niestety powinny one być używane do przesyłania kilku różnych typów danych (np. QString, podwójne, itp.) I nie chcę pisać dwudziestu różnych gniazd tylko dlatego, że potrzebuję jednego dla każdego typu danych. Ale gdy chcę zadeklarować gniazdo jakJak korzystać z szablonów z sygnałami QT i gniazdami?

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

QT mówi mi, że to nie jest możliwe, aby korzystać z szablonów w mechanizm sygnałów i slotów. Czy jest w pobliżu praca? Czy moje podejście może się po prostu poprawić?

+2

Co za pomocą 'QVariant'? – sjdowling

+0

Wygląda interesująco, ale nigdy wcześniej o tym nie słyszeliście! –

Odpowiedz

9

odpowiedź Dokładne: It is impossible

Obejście: Można zrobić coś takiego z nowymi mechanizm sygnałów i slotów składnię:

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; 
} 

wyjściowa:

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") 

Dlaczego? http://qt-project.org/wiki/New_Signal_Slot_Syntax

Możliwość automatycznie oddane typy jeśli istnieje niejawna konwersja (na przykład z QString do QVariant)

+1

To wcale nie odpowiada na pytanie. :( –

+1

@ Jean-MichaëlCelerier To jest lepsze niż odpowiedź, ponieważ zwykła odpowiedź brzmi: "To niemożliwe" Również OP zadał pytanie "Czy istnieje obejście? Czy moje podejście może być po prostu lepsze?" A moja odpowiedź wyjaśnia, jak osiągnąć coś podobnego do szablonu http://chernobyllab.blogspot.com/2015/04/how-to-use-templates-with-qt-signals.html – Chernobyl

Powiązane problemy