Russian Qt Forum
Ноябрь 25, 2024, 15:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: TextEdit  (Прочитано 7065 раз)
ru
Гость
« : Ноябрь 28, 2007, 19:03 »

дан набор цифр - 001, например
можно ли при их считывании заменять их на удаление элемента, например
то бишь заменять цыфры , например команду клавиатуры backspace


чтобы при считывании этих цыфр ужалялась предыдущая буква, либо делалось какое нить другое действие)

добиться перемещения курсора мне удалось. таким макаром: textEdit->moveCursor(QTextCursor::Left).

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Ноябрь 28, 2007, 19:43 »

Если я правильно понял, то дан набор кодов клавиш, и при их считывании нужно эмулировать нажатие этих клавиш.

Если нет, то выражаете мысли яснее, чтобы ненадо было догадоваться, что имееться ввиду.

зы: Задача описана просто отвратительно!
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ru
Гость
« Ответ #2 : Ноябрь 28, 2007, 19:48 »

хорошо, попробую исправить постановку задачи)

дан набор кодов клавиш, и правильно, при их счититывании надо эмулировать их нажатие
используется  QTextEdit.

Вопрос, как эмулировать клавиши типа backspace, del, PageUp, Home, End...
Записан
Dodge
Гость
« Ответ #3 : Ноябрь 28, 2007, 19:56 »

хорошо, попробую исправить постановку задачи)

дан набор кодов клавиш, и правильно, при их счититывании надо эмулировать их нажатие
используется  QTextEdit.

Вопрос, как эмулировать клавиши типа backspace, del, PageUp, Home, End...

Возможно поможет qt'шный хайлайтер, он подсвечивать умеет, но я думаю что и евенты на него повесить можно... в экзамплах есть.

+ есть комплитер, тож, при срабатывании комплитера можно ввыполнять какойто код
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Ноябрь 28, 2007, 20:22 »

хорошо, попробую исправить постановку задачи)

дан набор кодов клавиш, и правильно, при их счититывании надо эмулировать их нажатие
используется  QTextEdit.

Вопрос, как эмулировать клавиши типа backspace, del, PageUp, Home, End...


QKeyEvent вам в помощь ))). В конструктор передаеться модификатор, код клавиши и другие параметры (если они нужны)

Также см.

void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )
bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event )

Одним из этих методов можно будет послать объект QKeyEvent нужному виджету

ЗЫ: Учтите, что кода клавиш в Qt свои, и не совпадают с виртуальными кодами!
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ru
Гость
« Ответ #5 : Ноябрь 30, 2007, 15:56 »

Цитировать
QKeyEvent вам в помощь ))). В конструктор передаеться модификатор, код клавиши и другие параметры (если они нужны)

а можете привести пример?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Ноябрь 30, 2007, 16:19 »

Например так, эмитируем нажатие клавиши Space:

Код:
QKeyEvent event(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier);
QApplication::sendEvent(<widet>, &event);
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ru
Гость
« Ответ #7 : Ноябрь 30, 2007, 16:25 »

спасибо
все получилось
Записан
ru
Гость
« Ответ #8 : Ноябрь 30, 2007, 17:44 »

нда... не понимаю
после вот такого кода :

Код:
		    case 74:
        QKeyEvent event(QEvent::KeyPress, Qt::Key_Home, Qt::NoModifier);
                                            QApplication::sendEvent(textEdit, &event);
  break;
    case 121:
textEdit->insertPlainText("Again");
break;

выдаются ошибки :
Код:
1>.\text.cpp(1068) : error C2360: initialization of 'event' is skipped by 'case' label
1>        .\text.cpp(816) : see declaration of 'event'

подскажите, что ента такое, и с чем его едят?
Записан
Swappp
Гость
« Ответ #9 : Ноябрь 30, 2007, 17:53 »

case не создает блок, как например if. Соответственно у тебя где то ранее уже объявлена переменная event (скорее всего строка 816).
Записан
ru
Гость
« Ответ #10 : Ноябрь 30, 2007, 18:00 »

при обявлении другой переменной ошибка не исчезает...
в общем пока что не понимаю, как её исправить
Записан
Swappp
Гость
« Ответ #11 : Ноябрь 30, 2007, 18:09 »

Как вариант, возьми код после case в фигурные скобки, т.е.:
Код:
		    case 74:
        {QKeyEvent event(QEvent::KeyPress, Qt::Key_Home, Qt::NoModifier);
                                            QApplication::sendEvent(textEdit, &event); }
  break;
    case 121:
textEdit->insertPlainText("Again");
break;
и при других объявлениях event так же.
Записан
ru
Гость
« Ответ #12 : Ноябрь 30, 2007, 18:13 »

спасибо)))
додумался до этого на 1 минуту раньше - я ещё не безнадежен))

сработало
Записан
ru
Гость
« Ответ #13 : Ноябрь 30, 2007, 19:03 »

млин...все прекрасно, но только при таком отображении :

Код:
textEdit->insertHtml("<br>");
все выводит на экран нормально

а вот при таком -

Код:
{   
 
  QKeyEvent event(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
   QApplication::sendEvent(textEdit, &event);
  break;
  }

на экран ничего не выводится и ничего не происходит....

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 22.