等到按下按钮(QT)

时间:2013-07-25 13:04:15

标签: c++ qt signals-slots scramble

这是我在SO ^ _ ^

上的第一篇文章

我正在尝试使用QT框架实现letter scramble game。主要部分已经完成,但现在我惊呆了 - 我无法弄清楚如何使程序等待按钮在游戏中按下。

请帮帮我。提前致谢

这是我的游戏周期的伪代码:

//initialize grid, score, time

// accept words until timer expires
while (true)    {

    // draw the current state of the grid

    // log board

    // get current time

    // report score

    // check for game's end

    // report time remaining

    // prompt for word and converting it to char*
    //HOW TO WAIT UNTILL BUTTON PRESSED????!!!!

    // check whether to scramble grid

    // or to look for word on grid and in dictionary
}

P.S。由于这是我在这里的第一篇文章,我将非常感谢有关如何更正确地撰写问题的任何建议。

1 个答案:

答案 0 :(得分:3)

在我看来,你缺少的是Qt基于event-driven programming。 Qt提供您向用户显示的小部件/对象,例如按钮,窗口,控制器等。例如,QPushButton对象能够接收各种事件,例如点击鼠标按钮或按键盘键等等。

通过事件,Qt提供了一个插槽/信号机制,用于接收这些事件并对它们做出反应。因此,作为示例,在QPushButton的情况下,存在称为“按下”的信号。当用户点击按钮时,会发出其按下的信号。作为开发人员,您可以将按下的信号连接到插槽,这是您定义的功能。

例如,在一个名为MyClass的类中,它是从QObject派生的: -

QPushButton button("Select"); // create a QPushButton object
connect(button, SIGNAL(pressed()), this, SLOT(buttonPressed()));

connect语句将按钮的“按下”信号连接到名为“buttonPressed”的插槽函数。然后,您将定义该功能: -

void MyClass::buttonPressed()
{
    // handle the button pressed event....
}

所以你实际上没有任何调用等待按钮被按下作为框架,它的架构是这样设计的,你不应该把所有东西放在while(true)循环中。