QTimer 传一个参数过去并且调用函数,无效
时间: 2024-01-22 10:04:10 浏览: 93
在Qt中,QTimer是不支持传递参数的。因此,如果你想要在定时器的槽函数中使用参数,可以考虑以下两种方法:
1. 使用类成员变量保存你需要传递的参数,并在槽函数中使用它。
例如,你可以在类中定义一个成员变量 `int m_param`,在槽函数中使用 `m_param`:
```cpp
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = nullptr) : QObject(parent), m_param(0)
{
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &MyClass::onTimeout);
timer->start(1000);
}
private slots:
void onTimeout()
{
// 使用成员变量 m_param
qDebug() << "timeout: " << m_param;
m_param++;
}
private:
int m_param;
};
```
2. 使用 `QTimer::userData()` 函数来保存参数。
例如,你可以在 `QTimer` 对象中设置一个 `userData`,在槽函数中使用它:
```cpp
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = nullptr) : QObject(parent)
{
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &MyClass::onTimeout);
timer->setProperty("userData", QVariant::fromValue(0));
timer->start(1000);
}
private slots:
void onTimeout()
{
// 使用 userData
int param = sender()->property("userData").toInt();
qDebug() << "timeout: " << param;
sender()->setProperty("userData", QVariant::fromValue(param + 1));
}
};
```
以上两种方法都可以实现在槽函数中使用参数的功能。
阅读全文