Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2023, 16:53   #1
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию Эмуляция работы консольного окна через QPlainTextEdit в приложении GUI

Есть некоторое GUI-шное приложение. И в нём при нажатии на одну кнопку происходит вызов диалога, который эмулирует консольное окно. На этом диалоге расположен компонент типа класса Console, который является потомком класса QPlainTextEdit:

Код:
class Console : public QPlainTextEdit
В это текстовое поле должна выводиться и вводиться информация. Я нашёл такой способ эмуляции консольного окна:

habr.com/ru/articles/122831/

С выводом информации и с обработкой нажатия клавиш всё ясно. Но как быть с вводом информации?
То есть, например, в текстовое поле было выведено "Введите первое число: " , а как потом сделать ожидание ввода (аналог функций scanf, getstr или _getch в консольных приложениях)?
То есть как сделать так, чтобы программа ожидала бы ввода какой-то строки и последующего нажатия клавиши Return (Enter)?
А после этого программа снова вывела бы другую надпись, например "Введите второе число: " и снова ожидало бы ввода строки?

Как всё это можно сделать?
erslgoeirjh вне форума Ответить с цитированием
Старый 24.04.2023, 18:16   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Раз с обработкой нажатия клавиш все ясно, тогда в чем проблема то? Обрабатывайте нажатия, пока не получите значения клавиши Enter.
macomics вне форума Ответить с цитированием
Старый 25.04.2023, 11:05   #3
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Но как организовать ожидание нажатия клавиш? Как сделать так, чтобы после вывода сообщения "Введите первое число: " программа ожидала бы нажатие клавиши?
erslgoeirjh вне форума Ответить с цитированием
Старый 25.04.2023, 13:03   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Создаёте переменную типа boolean и организуете на ней spinlock (цикл while с опросом её состояния). При получении сообщения с нажатием клавиши Enter изменяете значение этой переменной на противоположенное.
macomics вне форума Ответить с цитированием
Старый 25.04.2023, 17:26   #5
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Создаёте переменную типа boolean и организуете на ней spinlock (цикл while с опросом её состояния). При получении сообщения с нажатием клавиши Enter изменяете значение этой переменной на противоположенное.
А как правильно получить это сообщение о нажатии клавиши Enter? Через фильтр событий или как-то ещё?
erslgoeirjh вне форума Ответить с цитированием
Старый 25.04.2023, 17:51   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Можете включить телепатор и считывать мысли пользователя...

Эти вопросы явно не сходятся с предыдущими утверждениями:
Цитата:
Сообщение от erslgoeirjh Посмотреть сообщение
С выводом информации и с обработкой нажатия клавиш всё ясно.
macomics вне форума Ответить с цитированием
Старый 26.04.2023, 15:45   #7
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

Ну то есть в обработчике события onEnter (условное название) происходит присваивание переменной isEnteredPressed значения true. А в цикле

Код:
while (isEntered==false)
{
    if (isEnterPressed==true)  isEntered = true; 
}
происходит присвоение переменной isEntered значения true, если значение переменной isEnterPressed равно true.
erslgoeirjh вне форума Ответить с цитированием
Старый 26.04.2023, 15:49   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А что мешает сразу присваивать переменной isEntered значения без второй переменной?
macomics вне форума Ответить с цитированием
Старый 26.04.2023, 17:25   #9
erslgoeirjh
Форумчанин
 
Регистрация: 19.05.2009
Сообщений: 153
По умолчанию

А как определить, что произошло событие onEnter?
erslgoeirjh вне форума Ответить с цитированием
Старый 26.04.2023, 17:52   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Так через ту же переменную isEntered
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция нажатия ЛКМ в приложении под мышкой Illusiony Общие вопросы Delphi 4 09.05.2014 16:37
Настройка консольного окна RobSys Операционные системы общие вопросы 2 14.03.2011 23:02
Оформление консольного окна. Smitt64 Visual C++ 3 11.03.2011 16:14
Отмена закрытия консольного окна после завершения работы приложения FeloS Общие вопросы C/C++ 21 25.02.2011 16:34
Эмуляция нажатия клавиши в любом активном приложении Marsel737 Общие вопросы Delphi 1 19.03.2010 14:44