【问题标题】:Wait until button pressed(QT)等到按下按钮(QT)
【发布时间】:2013-07-25 09:28:48
【问题描述】:

这是我在 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
}

附:由于这是我在这里的第一篇文章,我将不胜感激有关如何更正确地撰写问题的任何建议。

【问题讨论】:

  • 是控制台还是 GUI 应用程序?
  • 按钮触发什么?通常,在 Qt 中按下按钮会触发 signal 被触发,您可以将其连接到 slot 函数,然后处理您接下来要执行的逻辑。
  • 您好,欢迎来到 Stack Overflow!我鼓励您查看该站点的帮助,以了解哪些问题是不受欢迎的以及如何获得答案。如果不出意外,请阅读stackoverflow.com/help/how-to-ask,或者更好的是blog.stackoverflow.com/2010/10/asking-better-questions。如果您提供清晰的上下文、已编写的简洁代码和明确的问题,您将得到答案!
  • 这是一个 GUI 应用程序。按钮旨在让游戏循环继续,它使程序“抓住”这个词并继续它。

标签: c++ qt signals-slots scramble


【解决方案1】:

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

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

例如,在派生自 QObject 的名为 MyClass 的类中:-

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) 循环中。

【讨论】:

  • 明白了。在我的游戏示例中,我很清楚信号槽机制是如何工作的——我知道如何“没有时间”地实现它,但问题是我希望它可以播放 60 秒,并且我找不到合适的解决方案...
  • 使用 QTimer 60 秒,还是我错过了什么?
  • 对 :) 完全忘记了他们。
  • 哈哈,没问题;O)
  • @whalex,以防万一您不知道,如果答案现在已经解决了问题,您可以选择它旁边的勾号将其标记为已回答。这使人们更容易看到提出问题的人不再寻求解决方案。当然,对于回答的人来说,它还有额外的好处,那就是更多的声誉,但是,如果你不问,你就不会得到,对;OP
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2017-12-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多