识别哪种QTIMER的任何方法
Any way to identify which QTimer was called?
我考虑过要给回调提供其他参数,但看起来太复杂了(创建自己的修改了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((不支持诸如单光计时器或信号之类的高级功能。
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 任何方法都可以在C++中比较数据结构中的许多方法
- 在DelphiInterface上实现Dynamic_cast以获取基础对象类的任何方法
- 使用原始字节向量作为提升序列化的存档的任何方法
- 当我的结构中的任何变量发生更改时触发的事件的任何方法
- 是否有任何方法可以将两个boost :: multipRecision :: cpp_int编号乘以
- 是否有任何方法可以通过使用声明来提高可见度
- 设置用G 构建的二进制版本的任何方法
- 在参数相关查找之前进行模板替换的任何方法(或解决方法?
- 是否有任何方法可以在用户输入文本时读取字符
- 识别哪种QTIMER的任何方法
- C 模板功能是否有任何方法可以采用n个参数
- 告诉链接器"respect" __attribute__((__used__))的任何方法
- 是否有任何方法可以在初始化之前更改变量的类型,您可以用示例解释
- 是在32位系统上为Android Studio安装CMAKE的任何方法,以允许C 支持
- Winforms-将Visual C 项目UI转换为Visual C#的任何方法
- 复制列表类的构造函数,而无需在实现中使用任何方法
- 在成员变量上执行std :: upper_bound的任何方法
- 在海湾合作委员会中加快宏观预处理的任何方法