Russian Qt Forum
Май 18, 2012, 19:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: строка ввода для чата  (Прочитано 932 раз)
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« : Декабрь 20, 2011, 21:22 »

Строка - это QTextEdit.
В нее можно добавлять смайлы.
Добавляются смайл это строчка вида *smile*.
При добавлении в строку ввода заменяется на html вида <img src="smiles/smile.gif"/>
Дальше перед отправкой хочу получить из текстедита строку вида "some text *smile*", чтобы не пересылать лишний html и по другим причинам.
Брать html и делать replace это как-то совсем быдлокодерство по-моему.

Думаю это как-то возможно поработав с QTextEdit и QTextDocument, но не пойму как.

need assistance!
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #1 : Декабрь 20, 2011, 23:00 »

Если делать toPlainText получается строка вида "some text \177774" это подтверждает мое предположение насчет QTextDocument. Копаю дальше.

Пробовал добавять html <img src="smile.gif" alt="*smile*"> но в результирующем html его нет. Видимо после добавления он убирается.
« Последнее редактирование: Декабрь 20, 2011, 23:06 от andrew.k » Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 4122


Жаждущий знаний


« Ответ #2 : Декабрь 20, 2011, 23:51 »

Где-то когда-то тут пробегала темка по данному поводу. QTextEdit не полностью держит хтмл.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.

С уважением.
Пантер.
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #3 : Декабрь 21, 2011, 00:35 »

Использование alt было лишь попыткой, сам по себе он мне не нужен.
Вот первые шаги. Осталось доделать и причесать код.
Код
C++ (Qt)
   QTextDocument *doc = ui->textEdit->document();
   QTextBlock block = doc->begin();
   forever
   {
       if(!block.isValid())
           break;
       QString t;
       for (QTextBlock::iterator it = block.begin(); !(it.atEnd()); ++it)
       {
           QTextFragment fragment = it.fragment();
           if (fragment.isValid())
           {
               QTextImageFormat image = fragment.charFormat().toImageFormat();
               if(image.isValid())
               {
                   t += "*" + image.name() + "*";
               }
               else
                   t += fragment.text();
           }
       }
       block = block.next();
   }
В данном коде image.name() будет возвращать значение src из добавленного ранее тега <img>.

Видимо для полной красивости нужно будет писать свой хендлер, но пока что сойдет и так. Это уже что-то.

Советы по-прежнему приветствуются.
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #4 : Декабрь 21, 2011, 01:38 »

QChar::ObjectReplacementCharacter   0xfffc   Used to represent an object such as an image when such objects cannot be presented.

Как раз то самое значение \177774
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Kolobok
Бывалый
*****
Offline Offline

Сообщений: 480


« Ответ #5 : Декабрь 21, 2011, 12:58 »

А если две одинаковые картинки подряд будут, что получится?
Записан
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #6 : Декабрь 21, 2011, 13:47 »

А если две одинаковые картинки подряд будут, что получится?
А какая разница?
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Kolobok
Бывалый
*****
Offline Offline

Сообщений: 480


« Ответ #7 : Декабрь 21, 2011, 14:47 »

Попробуй, увидишь. Потом нам расскажешь Подмигивающий
Записан
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #8 : Декабрь 21, 2011, 15:17 »

Попробуй, увидишь. Потом нам расскажешь Подмигивающий
Получится две одинаковые картинки подряд.
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Kolobok
Бывалый
*****
Offline Offline

Сообщений: 480


« Ответ #9 : Декабрь 21, 2011, 23:57 »

Нет, что будет находиться в t после твоего кода?
Записан
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #10 : Декабрь 22, 2011, 00:21 »

Нет, что будет находиться в t после твоего кода?
Я не понимаю тебя. Ты на что-нибудь намекаешь? Или что-то не понимаешь сам. Скажи прямо.
В t будет "some text *smile**smile*" - два смайла подряд.

Две идущих подряд одинаковые картинки ни чем не отличаются от двух разных и любых других комбинаций.
Поясни.
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Kolobok
Бывалый
*****
Offline Offline

Сообщений: 480


« Ответ #11 : Декабрь 22, 2011, 03:10 »

А если так:
Код:
QTextDocument doc;
QTextCursor cursor(&doc);
cursor.insertImage(":/image.png");
cursor.insertImage(":/image.png");
Записан
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #12 : Декабрь 22, 2011, 12:32 »

А если так:
Код:
QTextDocument doc;
QTextCursor cursor(&doc);
cursor.insertImage(":/image.png");
cursor.insertImage(":/image.png");
Я не понимаю тебя. Ты на что-нибудь намекаешь? Или что-то не понимаешь сам. Скажи прямо.
В t будет ":/image.png:/image.png" - два смайла подряд.

Две идущих подряд одинаковые картинки ни чем не отличаются от двух разных и любых других комбинаций.
Поясни.
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Kolobok
Бывалый
*****
Offline Offline

Сообщений: 480


« Ответ #13 : Декабрь 22, 2011, 13:55 »

В t будет ":/image.png:/image.png" - два смайла подряд.

Проверял? У меня результат другой.
Записан
andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1176


*ерес - местный сумасшедший


« Ответ #14 : Декабрь 22, 2011, 15:13 »

В t будет ":/image.png:/image.png" - два смайла подряд.

Проверял? У меня результат другой.
А какой результат у тебя сразу нельзя все написать?
В t будет "*:/image.png**:/image.png*"
Представленый кусок кода тестовый. Нужен был, чтобы разобраться как это работает.

Сейчас уже все реализовано и все работает без проблем. Этот код уже переделан.
Записан

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

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