How to use patterns with QT signals and slots?

I want to use signals and slots in my program, but, unfortunately, they should be used to transfer several different types of data (for example, QString, double, etc.), and I do not want to write twenty different slots just because I need one for each data type. But when I want to declare a slot like

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

QT tells me that using patterns in signals and slots is not possible. Is there a workaround? Or has my approach just improved?

+6
source share
1 answer

Exact answer: This is not possible.

Workaround: You can do something similar with the new signal and slot syntax:

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

Output:

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

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

The ability to automatically create types if they are implicit conversion (for example, from QString to QVariant)

+9
source

Source: https://habr.com/ru/post/978243/


All Articles