识别哪种QTIMER的任何方法

Any way to identify which QTimer was called?

本文关键字:任何 方法 QTIMER 识别      更新时间:2023-10-16

我考虑过要给回调提供其他参数,但看起来太复杂了(创建自己的修改了QTimer对象,等(

(

阅读QTimer文档后,我想到的另一件事是保存了计时并检查一下,但是由于回调中没有任何内容,我不知道该检查什么:/

如果某人对特殊用户酶感兴趣:https://github.com/bluscream/pytson_plugins/blob/master/scripts/antiafk/ init .py#.py#l35

我可以想到至少可以采用两种方法:

首先,您可以通过在插槽中施放发件人来检索QTimer的指针:

class MyClass : public QObject
{
    Q_OBJECT
public:
    MyClass(QObject * parent = 0);
    <...>
private Q_SLOTS:
    void onTimerFired();
private:
    void doSomethingAndStartTimer();
private:
    int m_firstTimerId;
    int m_secondTimerId;
};
void MyClass::doSomethingAndStartTimer()
{
    <...>
    QTimer *timer = new QTimer(this);
    m_firstTimerId = timer->timerId();
    connect(timer, SIGNAL(timeout()), this, SLOT(onTimerFired()));
    timer->start();
    <..>
}
void MyClass::onTimerFired()
{
    QTimer * timer = qobject_cast<QTimer*>(sender());
    if (timer) {
        if (timer->timerId() == m_firstTimerId) {
            <...> // Process it somehow
        }
        else if (timer->timerId() == m_secondTimerId) {
            <...> // Process it some other way
        }
    }
}

第二,您只需抛弃显式 QTimer用法,而是使用startTimer以及重新完成类timerEvent方法,该方法接收QTimerEvent,您可以从中获取计时器ID

class MyClass : public QObject
{
    Q_OBJECT
public:
    MyClass(QObject * parent = 0);
    <...>
private:
    virtual void timerEvent(QTimerEvent * event);
private:
    void doSomethingAndStartTimer();
private:
    int m_firstTimerId;
    int m_secondTimerId;
};
void MyClass::doSomethingAndStartTimer()
{
    <...>
    int interval = 100; // 100 msec
    m_firstTimerId = startTimer(interval);
    <...>
}
void MyClass::timerEvent(QTimerEvent * event)
{
    if (event->timerId() == m_firstTimerId) {
        <...> // process it somehow
    }
    else if (event->timerId() == m_secondTimerId) {
        <...> // process it some other way
    }
}

QTimer的文档中提到了第二种方法:

qtimer的替代品

使用QTimer的一种替代方法是将qobject :: startTimer((命名为对象,并重新进来qobject :: timerevent((在您的类中的事件处理程序(必须继承qobject(。缺点是timerevent((不支持诸如单光计时器或信号之类的高级功能。