это мой первый пост на SO ^ _ ^
Я пытаюсь реализовать игра письмо схватка с каркасом QT. Основная часть закончена, но теперь я ошеломлен — я не могу понять, как заставить программу ждать нажатия кнопки внутри игры.
Пожалуйста, помогите мне с этим. заранее спасибо
Вот псевдокод моего игрового цикла:
//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
}
Постскриптум Так как это мой первый пост здесь, я буду признателен за любые предложения о том, как правильно составлять вопросы.
Мне кажется, что вам не хватает того, что Qt основан на программирование на основе событий. 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).
Других решений пока нет …