2013-07-25 6 views
1

это не мой первый пост на SO^_^Подождите, пока кнопка нажата (QT)

Я пытаюсь реализовать letter scramble game с рамки интервала 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 
} 

P.S. Поскольку это мой первый пост здесь, я буду благодарен за любые предложения по правильному составлению вопросов.

+0

Это консольное или графическое приложение? –

+0

Что вызывает кнопка? В общем случае нажатие кнопки в Qt запускает «сигнал», который вы можете запустить, чтобы вы могли подключиться к функции «slot», чтобы затем обработать, какую логику вы хотите выполнить дальше. –

+0

Здравствуйте, и добро пожаловать в переполнение стека! Я рекомендую вам ознакомиться с помощью сайта, чтобы узнать, какие вопросы не одобряются и как получить ответы. Если ничего больше, прочитайте http://stackoverflow.com/help/how-to-ask или, что еще лучше, http://blog.stackoverflow.com/2010/10/asking-better-questions/. Если вы предоставите четкий контекст, сжатый код, который вы уже написали, и ясный вопрос, вы получите ответы! –

ответ

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())); 

о соединении оператор соединяет «нажатой» сигнал кнопки на функции слота под названием «buttonPressed». Затем вы должны определить эту функцию: -

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

Так что вы на самом деле не все звонки ждать кнопки будет нажата в качестве основы, и это архитектура разработана таким образом, и вы не должны быть помещая все в течение (истинного) цикла.

+0

Понятно. Мне ясно, как работает механизм сигнального слота, в примере моей игры - я знаю, как реализовать его «без времени», но дело в том, что я хочу, чтобы он воспроизводился, скажем, на 60 секунд, и я не может найти правильное решение для этого ... – whalex

+0

Используйте QTimer в течение 60 секунд, или я чего-то не хватает? – TheDarkKnight

+0

Вправо :) Полностью забыли о них. – whalex

Смежные вопросы