我想在我的程序中使用信号和插槽,但不幸的是,它们应该用于传输几种不同的数据类型(例如QString,double等),我不想写20个不同的插槽,因为我需要一个为每个数据类型。但是,当我要声明一个槽状如何使用带有QT信号和插槽的模板?
template <typename t>
void Slot1(t data);
QT告诉我,这是不可能的信号和槽使用模板。有没有解决方法?或者我的方法是否可以改进?
我想在我的程序中使用信号和插槽,但不幸的是,它们应该用于传输几种不同的数据类型(例如QString,double等),我不想写20个不同的插槽,因为我需要一个为每个数据类型。但是,当我要声明一个槽状如何使用带有QT信号和插槽的模板?
template <typename t>
void Slot1(t data);
QT告诉我,这是不可能的信号和槽使用模板。有没有解决方法?或者我的方法是否可以改进?
准确的答案:It is impossible
解决方法:你可以做这样的事情有新的信号和槽语法:
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();
插槽:
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")
为什么? http://qt-project.org/wiki/New_Signal_Slot_Syntax
可能性自动转换的类型,如果有隐式 转换(例如,从QString时,的QVariant)
这完全没有回答这个问题。 :( –
@ Jean-MichaëlCelerier它比回答更好,因为简单的答案是“这是不可能的”另外OP问:“是否有解决方法?或者我的方法是否简单改进?”我的答案解释了如何实现类似于模板。http://chernobyllab.blogspot.com/2015/04/how-to-use-templates-with-qt-signals.html – Chernobyl
有关使用'QVariant'什么? – sjdowling
看起来很有趣,但从未听说过它! –