Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用带有QT信号和插槽的模板?_C++_Qt_Signals_Signals Slots - Fatal编程技术网

C++ 如何使用带有QT信号和插槽的模板?

C++ 如何使用带有QT信号和插槽的模板?,c++,qt,signals,signals-slots,C++,Qt,Signals,Signals Slots,我想在我的程序中使用信号和插槽,但不幸的是,它们应该用于传输几种不同的数据类型(例如QString、double等),我不想仅仅因为每种数据类型需要一个插槽就写二十个不同的插槽。但是当我想声明一个插槽时 template <typename t> void Slot1(t data); 模板 void-Slot1(t数据); QT告诉我,在信号和插槽中使用模板是不可能的。有解决办法吗?或者我的方法可以简单地改进吗?准确答案: 解决方法:您可以使用新的信号和插槽语法执行以下操作:

我想在我的程序中使用信号和插槽,但不幸的是,它们应该用于传输几种不同的数据类型(例如QString、double等),我不想仅仅因为每种数据类型需要一个插槽就写二十个不同的插槽。但是当我想声明一个插槽时

template <typename t>
void Slot1(t data);
模板
void-Slot1(t数据);
QT告诉我,在信号和插槽中使用模板是不可能的。有解决办法吗?或者我的方法可以简单地改进吗?

准确答案:

解决方法:您可以使用新的信号和插槽语法执行以下操作:

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();
插槽:

为什么?

如果存在隐式类型,则可以自动强制转换类型 转换(例如从QString到QVariant)


使用
QVariant
?看起来很有趣,但以前从未听说过!如果不行,那std::any呢?我发现QVariant很难使用。这根本不能回答问题(@Jean-MichaëlCelerier)这比答案好,因为简单的答案是“这是不可能的”,也有人问“有解决办法吗?或者我的方法可以简单地改进吗?”我的答案解释了如何实现类似于模板的东西。
void MainWindow::random(QVariant var)
{
    qDebug() << var;
}
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")