2017-01-18 2 views
-1

Я пишу математическую программу для моего внука. Сначала я написал его как консольное приложение, как показано ниже, и все работает нормально.Как подождать нажатия клавиши в приложении Qt GUI

for(int i = 0; i <= 9; i++) 
{ 
    n2Digit = GetNewDigit(iProblemsWorkedArray); 
    int validAnswer = add(n1Digit, n2Digit); 
    bool noKey = true; 
    while(noKey) 
    { 
     char KeyPressed = getch(); 
     int KeyAscii = KeyPressed; 
     if((KeyAscii >= 48) && (KeyAscii <= 57) && (validAnswer < 10)) 
     { 
      studentAnswer = KeyAscii - 48; 
      noKey = false; 
     } 

     yada yada... 

    } 
}   

Теперь я хочу, чтобы написать то же самое, используя Qt GUI, но не нашел, что

char KeyPressed = getch(); 

в то время цикла больше не работает в графическом режиме.

Я искал дни и пришел к выводу, что я должен неправильно формулировать поиск. Кто-нибудь, пожалуйста, помогите?

+1

В графическом интерфейсе вы не работаете с петлями напрямую, в Qt вы работаете с сигналами и слотами. Не могли бы вы объяснить, какова ваша цель? – eyllanesc

+0

В Qt вы используете виджет, в котором вы можете писать, и это генерирует ряд сигналов, я рекомендую вам проверить QLineedit – eyllanesc

+0

Пример ... Пользователю представлен ряд дополнительных проблем формы 3 + x = где x представлен по цифрам от 0 до 9. Первый будет 3 + 0 = __ пользователь набирает свой ответ (не используя клавишу ввода. Как только он нажимает клавишу 3, появляется следующая проблема 3 + 1 = __, а типы пользователей в его ответе и появляется следующая проблема: это продолжается для каждой цифры 0..9. Мне нужно ждать каждого ответа, но не знаю, как это сделать без зависания программы во время ожидания. n1 + n2 = n3 (это lineEdits.) – Ken

ответ

0

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

Если предположить, что это правильно, вы можете сделать одну из двух вещей:

  • Подкласс виджет, где вы показываете вопросы, и переопределение метода keyPressEvent. Qt вызывает этот метод для виджета, который получает фокус клавиатуры. Он передает объекты QKeyEvent, содержащие ключ, который был нажат. Затем вы можете проверить ключ, чтобы убедиться, что это правильно или нет, и предоставить обратную связь. Дополнительную информацию см. В документации QWidget::keyPressEvent.

  • Без подкласса вы можете создать фильтр событий и установить его на стандартный виджет. Фильтр событий принимает события, отправленные целевому виджету, и вы можете перехватывать события QKeyEvent, проверять их на правильный или неправильный ответ и соответственно реагировать. Для получения дополнительной информации см. Документацию QObject::installEventFilter.

+0

Студент представлен рядом простых проблем с добавлением: – Ken

+0

пример ... Студент представлен рядом дополнительных задач вида 3 + x = где x представлен цифрами от 0 до 9. Первый be 3 + 0 = __ студент набирает свой ответ (не используя ключ ввода. Как только он набирает ключ 3, появляется следующая проблема 3 + 1 = __, а ученик вводит его ответ, и появляется следующая проблема. продолжается для каждой из цифр 0..9. Мне нужно ждать каждого ответа, но не знаю, как это сделать без зависания программы во время ожидания. – Ken

+0

Вы не ждете его. Это не то, как работают графические приложения. Вместо того, чтобы настраивать циклы, где вы что-то ждете, GUI имеет цикл событий, в котором вы отвечаете. Одним из таких событий в Qt является событие QKeyPress. Проблема с вашим вопросом заключается в том, что вы запрашиваете обучение по совершенно новому способу программирования, и это выходит за рамки этого сайта. Вам нужно получить книгу о Qt или найти некоторые учебные пособия и узнать, как делать управляемые событиями графические интерфейсы. Попытка конвертировать консольное приложение не будет работать; вы должны переделать его. – goug

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