2017-08-25 76 views
0

我已经使用Qkeyevent在QT中定义了关键的A和B事件。当我在键盘上按A时,会执行花费1秒钟的过程A()。如果我在键盘上按B,它会执行过程B()。我想通过处理A()来更新全局值,并在进程B()中获取值。然而过程A()花费1秒钟。如果我这么快按下B键,我会得到错误的值。如何等待A过程完成,以便我在QT中快速推B。如何等待keyevent直到在QT中完成进程

int g = 3; 
A() { 
    ... 
    //cost 1 second 
    g = 4; 

} 
B() { 
    cout << g; 
} 

首先,我推A,然后按b。如果我在1s内压入B AFER推B,我会得到G = 3

回答

0

我不知道你的实现细节,但我会建议看看this example。 除非您并行执行此操作(多线程),否则当事件“A被推送”到达时,您将在事件处理函数keyPressEvent(QKeyEvent *event)中调用操作A()。在这种情况下,事件“B被推”不应该被处理,直到A()完成,因为动作A()会阻止事件循环(在你的情况下1秒)。这样,当B()被称为A()已经完成。

+0

谢谢你的评论。我只是在主线程中写了keyPressEvent。我应该使用线程吗? –

+0

@Moto杰克,这不是一个评论的答案:)调用B()时,确保'A()'完成,可以保证'g'变量已经改变。 – WindyFields

+0

谢谢。我会尝试使用线程 –