Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ru от Ноябрь 28, 2007, 19:03



Название: TextEdit
Отправлено: ru от Ноябрь 28, 2007, 19:03
дан набор цифр - 001, например
можно ли при их считывании заменять их на удаление элемента, например
то бишь заменять цыфры , например команду клавиатуры backspace


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

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



Название: Re: TextEdit
Отправлено: pastor от Ноябрь 28, 2007, 19:43
Если я правильно понял, то дан набор кодов клавиш, и при их считывании нужно эмулировать нажатие этих клавиш.

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

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


Название: Re: TextEdit
Отправлено: ru от Ноябрь 28, 2007, 19:48
хорошо, попробую исправить постановку задачи)

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

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


Название: Re: TextEdit
Отправлено: Dodge от Ноябрь 28, 2007, 19:56
хорошо, попробую исправить постановку задачи)

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

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

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

+ есть комплитер, тож, при срабатывании комплитера можно ввыполнять какойто код


Название: Re: TextEdit
Отправлено: pastor от Ноябрь 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 свои, и не совпадают с виртуальными кодами!


Название: Re: TextEdit
Отправлено: ru от Ноябрь 30, 2007, 15:56
Цитировать
QKeyEvent вам в помощь ))). В конструктор передаеться модификатор, код клавиши и другие параметры (если они нужны)

а можете привести пример?


Название: Re: TextEdit
Отправлено: pastor от Ноябрь 30, 2007, 16:19
Например так, эмитируем нажатие клавиши Space:

Код:
QKeyEvent event(QEvent::KeyPress, Qt::Key_Space, Qt::NoModifier);
QApplication::sendEvent(<widet>, &event);


Название: Re: TextEdit
Отправлено: ru от Ноябрь 30, 2007, 16:25
спасибо
все получилось


Название: Re: TextEdit
Отправлено: ru от Ноябрь 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'

подскажите, что ента такое, и с чем его едят?


Название: Re: TextEdit
Отправлено: Swappp от Ноябрь 30, 2007, 17:53
case не создает блок, как например if. Соответственно у тебя где то ранее уже объявлена переменная event (скорее всего строка 816).


Название: Re: TextEdit
Отправлено: ru от Ноябрь 30, 2007, 18:00
при обявлении другой переменной ошибка не исчезает...
в общем пока что не понимаю, как её исправить


Название: Re: TextEdit
Отправлено: Swappp от Ноябрь 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 так же.


Название: Re: TextEdit
Отправлено: ru от Ноябрь 30, 2007, 18:13
спасибо)))
додумался до этого на 1 минуту раньше - я ещё не безнадежен))

сработало


Название: Re: TextEdit
Отправлено: ru от Ноябрь 30, 2007, 19:03
млин...все прекрасно, но только при таком отображении :

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

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

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

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