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