gpt4 book ai didi

c++ - QT信号槽如何使用模板?

转载 作者:可可西里 更新时间:2023-11-01 16:36:20 25 4
gpt4 key购买 nike

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

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

Possibility to automatically cast the types if there is implicit conversion (e.g. from QString to QVariant)

关于c++ - QT信号槽如何使用模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26950718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com