Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt4]получение последнего символа из QTextEdit, или последней строки(но не всего текста) 
V
    Опции темы
anatox91
Дата 6.6.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



вобщем есть такая проблема. Надо узнать последний символ введенный в QTextEdit. toPlainText() не подойдет, т.к. мне не нужен весь текст, и это будет неэффективно при работе с большим объемом текста. Пример:
Код

void TextEdit::keyPressEvent(QKeyEvent *keyEvent) {
     if(keyEvent->key() == Qt::Key_Return) {
                        //вот здесь - если последний символ такой-то - сделать то-то

в документации чет ниче похожего не нашел... у QTextCursor'a тоже вроде ниче нужного нема...
заранее спасибо!


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Elfebet
Дата 6.6.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



Тебе нужен последний введенный символ или последний символ в тексте.
если первое то keyPressEvent(QKeyEvent *keyEvent) и будет последний символ
если второе тебе все равно прийдется делать  toPlainText(), ведь чтобы найти последний символ для этого нужен текст, где искать, правильно?


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
anatox91
Дата 6.6.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Elfebet, да, я немного неправильно выразился, мне нужен последний символ в тексте, но получать через toPlainText() может быть не слишком быстро если текст большой... вот я почему и спрашиваю, мне нужен не весь текст, а только его последний символ, может как-то через QTextCursor можно это сделать...


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
SABROG
Дата 6.6.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Может быть тогда есть смысл посмотреть в сторону QDataWidgetMapper ?

Это сообщение отредактировал(а) SABROG - 6.6.2008, 15:52


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
anatox91
Дата 6.6.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



насколько я понял это для model/view-представления, а мне нужно для QTextEdit  smile 
вообще говоря, я хочу сделать фишку, которая есть во всех IDE(под С++) - когда вводится символ "{" или ":" и нажимается Enter, то курсор должен перескакивать не просто наследующую строку, а еще и под этим символом. Поэтому мне и показалось, что если для этого каждый раз делать банально toPlainText(), то это будет медленно работать, если объем текста большой...


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
anatox91
Дата 6.6.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



вобщем, сделал так:
Код

void TextEdit::keyPressEvent(QKeyEvent *keyEvent) {
     if(keyEvent->key() == Qt::Key_Return) {
                        QString text = toPlainText();
                        if((text.right(1) == "{") || (text.right(1) == ":")) {
                                          int n = textCursor().columnNumber();
                                          insertPlainText("\n");
                                          for(int i=0; i < n; ++i) insertPlainText(" ");
                                          return;
                                          }
                                          }
     QTextEdit::keyPressEvent(keyEvent);
}

но сабж еще интересует


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Elfebet
Дата 6.6.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



а если просто запоминать, что нажата клава shift+[ или shift+; то это знак "{ или :" и если следующий символ идет Qt::Key_Return то выполняеш это дейсвие, иначе ниче не делаеш


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
anatox91
Дата 6.6.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Elfebet, мне кажется должен быть вариант покрасивее, может быть через QTextCursor... 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
JackYF
Дата 7.6.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(anatox91 @  6.6.2008,  15:41 Найти цитируемый пост)
когда вводится символ "{" или ":" и нажимается Enter, то курсор должен перескакивать не просто наследующую строку, а еще и под этим символом

Запоминай два последних введённых символа smile Памяти немного, доступ константный smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
anatox91
Дата 7.6.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



всем спасибо, проблема решена через QTextBlock:
Код

QString text = textCursor().block().text();


Это сообщение отредактировал(а) anatox91 - 7.6.2008, 12:51


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0852 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.