如何使用wxEvtHandler :: Connect将wxWidgets计时器连接到事件

时间:2011-06-09 15:34:56

标签: c++ wxwidgets

我一直在尝试将我的计时器连接到一个功能。 在我的派生类中 我在做什么

Timer->SetOwner(this,wxID_Timer);
Timer->Connect(wxID_Timer,wxTimerEventHandler( Window::OnUpdate ), NULL, this );

我的OnUpdate声明是

void OnUpdate( wxTimerEvent& event );

任何人都可以告诉我这里有什么问题,为什么在我启动计时器后没有定期调用OnUpdate? 谢谢,麻烦您了。

另外我没有使用静态事件表。关于wxTimer的其他答案对我没有帮助。

3 个答案:

答案 0 :(得分:6)

经过一番搜索,我确实找到了答案,没有人回答,所以我在这里发帖。 有一些事情我做错了。 一世。我实际上必须将班级连接到我的计时器。这意味着我必须做一些像

这样的事情
this->Connect(Timer.GetId(),wxEVT_TIMER,wxTimerEventHandler( Window::OnUpdate ), NULL, this );

其中wxEVT_TIMER是事件类型。

与断开连接类似

this->Disconnect(wxID_Timer,wxEVT_TIMER,wxTimerEventHandler( Window::OnUpdate ), NULL, this );

答案 1 :(得分:4)

这里似乎有些混乱所以让我试着清除它。

您可以 在计时器本身上调用timer->Connect(...) 使用SetOwner(frame),然后执行frame->Connect(...)

调用SetOwner()然后在计时器上调用Connect()没有多大意义,因为SetOwner()确保将计时器事件直接传递给所有者。但是默认情况下没有所有者,并且计时器会将事件发送给自己,这就是为什么没有SetOwner()调用你必须在计时器上调用Connect()

答案 2 :(得分:3)

答案对我不起作用。这就是我所做的。

首先,你必须让你的框架拥有wxtimer发出的事件。

m_timer.SetOwner( this );

然后你可以让你的框架的事件处理程序处理事件。 如果你只有一个计时器,请使用它。

this->Connect( wxEVT_TIMER, wxTimerEventHandler( Frame::OnTimer ), NULL, this );

如果您有多个计时器,请使用此计时器将每个计时器的事件连接到另一个计时器。

this->Connect( m_timer.GetId(), wxEVT_TIMER, wxTimerEventHandler( Frame::OnTimerForSpecificTimer ), NULL, this );

执行此操作将允许帧将timer事件放入其事件队列中并在可能的情况下处理它。