Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: jatsuk от Апрель 05, 2012, 10:37



Название: Изменение Qtextedit [РЕШЕНО]
Отправлено: jatsuk от Апрель 05, 2012, 10:37
Хочу сделать нормальное редактирование текста для пользователя в Qtextedit

есть Qtextedit
есть строка QString opsim= "<b>балалала</b>"

Текст отображается "красиво", тоесть жирным в opisan_2
 ui->opisan_2->setText(opsim);

Нужно пользователь редактировал его именно в таком виде.... потом сохранял, но как забрать оттуда этот текст в том же виде <b>балалала2</b>  ??? например , через
 r2=ui->opisan_2->toPlainText(); он забирает просто текст без тегов -  балалала2
А через ui->opisan_2->toHTML(); он забирает много лишнего <html><head><куча стилей><b>балалала2</b> </html></head>



Название: Re: Изменение Qtextedit
Отправлено: interv от Апрель 05, 2012, 10:39
ui->opisan_2->text() че вернет?
и что есть opisan_2?

если  opisan_2 - Qtextedit, то вообще никак вроде, храни в стринге. Хотя Qt asistant говорит что есть метод text() хотя на самом деле это нитак, в Qt4.0 этот метод был убран.

И юзай setPlainText или setHtml в зависимости от строки. В данном случае setHtml


Название: Re: Изменение Qtextedit
Отправлено: jatsuk от Апрель 05, 2012, 11:10
text() ничего не возвратит ) не компилит, нет такого )

А можно как нибудь переотобразить textedit. Вот например у меня отображается через setText, а сделать чтобы отображалось в setPlaintext, не сохраняя ?

Ну или может все стили отключить  как нибудь, чтобы лишних тегов не писал ?

Ну и крайний вариант, теги то всегда будут постоянные (сам стиль текст эдита), может их из QString удалять ?


Название: Re: Изменение Qtextedit
Отправлено: interv от Апрель 05, 2012, 11:51
Сделай ты QString и храни там свою html'ку при редактировании вставляй ее, при кнопочке сохранить, например, обновляй ее в QTextEdit'е


Название: Re: Изменение Qtextedit
Отправлено: jatsuk от Апрель 05, 2012, 14:01
Вы походу не поняли ) проблема как раз в том , что пользователь должен сам в QtextEdit редактировать и там не должно отображаться самих тегов, а всё должно быть в презентабельном виде.

Неужели никто такого не делал... полюбому кто нибудь делал пользовательский редактор текста, что то типа ворд


Название: Re: Изменение Qtextedit
Отправлено: Bepec от Апрель 05, 2012, 14:06
Ну ты сам сказал себе решение.

У тебя 2 варианта - выводить текст в HTML или plainText. ПлейТекст не имеет жирности и прочих плюшек. HTML имеет.
Вывод? выводить HTML, обрубая ненужное.

PS простое решение, не очень и элегантное.


Название: Re: Изменение Qtextedit
Отправлено: jatsuk от Апрель 05, 2012, 14:38
Я думал, вдруг есть что то получше )

Подскажите, как убрать ненужное из строки QString, а то не разу не делал
например убрать первые 5 и последние 2. ну или определенный текст убрать...


Название: Re: Изменение Qtextedit
Отправлено: iroln от Апрель 05, 2012, 14:40
Я заметил, что топикастер так выражает свои мысли, что ничерта не понятно, что он хочет. В итоге куча советов вообще не в тему. :)

jatsuk, ты хочешь вытащить из textEdit текст с тегами, но без "HTML-мусора", вроде заголовка и т.п.?


Название: Re: Изменение Qtextedit
Отправлено: Bepec от Апрель 05, 2012, 14:42
Слава  классу QString!!!

А так же методам indexOf(), lastIndexOf(), mid().


Название: Re: Изменение Qtextedit
Отправлено: _OLEGator_ от Апрель 05, 2012, 14:47
Элементарные операции со строками не знать... Может проще один раз открыть assistant и почитать про класс QString?
Не стоит на такие вопросы вообще давать ответы, новички уже по любому поводу и без повода лезут на форум задавать вопросы.


Название: Re: Изменение Qtextedit
Отправлено: iroln от Апрель 05, 2012, 14:49
Цитировать
indexOf(), lastIndexOf(), mid().
Да это всё детские забавы, нужен суровый парсер HTML, который можно натравить на то, что выплёвывает toHtml(), чтобы получить Document Object Model. Вот это по-взрослому, а то, понимаешь, indexOf...  ;D


Название: Re: Изменение Qtextedit
Отправлено: Bepec от Апрель 05, 2012, 14:50
Я indexOf ом SQL запросы правлю!!! Да я им сотни байтов убиваю!! Да я! Да он! ... :D


Название: Re: Изменение Qtextedit
Отправлено: jatsuk от Апрель 05, 2012, 14:54
iroln, я это ещё в первом сообщении написал... даже с примерами )

Спасибо, что ответили на глупый вопрос с Qstring )


Название: Re: Изменение Qtextedit
Отправлено: iroln от Апрель 05, 2012, 15:03
jatsuk, если тебе всё понятно, это не значит, что остальным тоже всё понятно. Тот, кто не знает о твоей проблеме, может всё видеть совершенно иначе.

Во-первых, название темы: Изменение Qtextedit 
Очень "информативно" и сразу "очевидно", что у тебя за проблема.

Во-вторых, первое сообщение написано сумбурно и много лишней информации. Какой-то пользователь, что-то там редактирует, какое это вообще имеет отношение к твоей проблеме? Редактируется всё нормально в textEdit. Надо было написать всего лишь, что:
Цитировать
А через ui->opisan_2->toHTML(); он забирает много лишнего <html><head><куча стилей><b>балалала2</b> </html></head>
То есть, как убрать лишнее (кучу стилей, заголовок и т.п.) из HTML-вывода.


Название: Re: Изменение Qtextedit
Отправлено: jatsuk от Апрель 05, 2012, 15:42
короче, спасибо, я спать )


Название: Re: Изменение Qtextedit
Отправлено: jatsuk от Апрель 06, 2012, 11:14
Вдруг кому понадобится, просто, но всё же выложу
Код:
 QString r2=ui->opisan_2->toHtml();

       QString y = "<body style=";  // индекс начала
      int gggggg=r2.indexOf(y);
      gggggg+=89;
// <body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;">

      QString x = "</body>"; // индекс конца
     int gggggg2=r2.indexOf(x);

     int sc=gggggg2-gggggg; // сколько строк нужно записать в z

     QString z = r2.mid(gggggg, sc);


Название: Re: Изменение Qtextedit
Отправлено: V1KT0P от Апрель 06, 2012, 11:17
Вдруг кому понадобится, просто, но всё же выложу
Код:
 QString r2=ui->opisan_2->toHtml();

       QString y = "<body style=";  // индекс начала
      int gggggg=r2.indexOf(y);
      gggggg+=89;

      QString x = "</body>"; // индекс конца
     int gggggg2=r2.indexOf(x);

     int sc=gggggg2-gggggg; // сколько строк нужно записать в z

     QString z = r2.mid(gggggg, sc);
Надеюсь в реальных программах ты не используешь такие имена переменных, или у тебя в мозгу обфускатор/деобфускатор стоит? =).


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: jatsuk от Апрель 06, 2012, 11:20
А что плохого в таких названиях ?) это локальные переменные, нигде больше в коде не применяются , названия их запоминать не надо )


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: V1KT0P от Апрель 06, 2012, 11:32
А что плохого в таких названиях ?) это локальные переменные, нигде больше в коде не применяются , названия их запоминать не надо )
Сравни что проще понять это:
Код:
 QString r2=ui->opisan_2->toHtml();

       QString y = "<body style=";  // индекс начала
      int gggggg=r2.indexOf(y);
      gggggg+=89;
// <body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;">

      QString x = "</body>"; // индекс конца
     int gggggg2=r2.indexOf(x);

     int sc=gggggg2-gggggg; // сколько строк нужно записать в z

     QString z = r2.mid(gggggg, sc);
Или это:
Код
C++ (Qt)
QString html = ui->opisan_2->toHtml();
 
QString bodyStart = "<body style=";
int start = html.indexOf(bodyStart);
start += 89;
// <body style=" font-family:'Tahoma'; font-size:9pt; font-weight:400; font-style:normal;">
 
QString bodyEnd = "</body>";
int end = html.indexOf(bodyEnd);
 
int length = end - start;
 
QString htmlClear = html.mid(start, length);
Согласись аж приятно стало смотреть. Если в первом случае приходится постоянно смотреть что за переменная и для чего, то для второго беглого взгляда хватит все понять.


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: iroln от Апрель 06, 2012, 11:56
С товарищем всё ясно, студент видимо. :)


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: V1KT0P от Апрель 06, 2012, 12:11
С товарищем всё ясно, студент видимо. :)
И что? Если я студент, это не значит что я не работаю. Когда тебе дают изменить проект прошлого программиста, а там одно-двух-буквенная мешанина это еще то удовольствие. Благо есть uncrusify и ему подобные программы, хоть стиль кода можно автоматически привести в порядок.


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: iroln от Апрель 06, 2012, 12:18
И что? ...
Да вообще-то ничего. :)
Просто большинство студентов вот так думают и пишут программы, пока не начнут работать над реальными проектами, и с этим ничего не сделаешь, пока в вузах не будут уделять этому внимание, а на дом не будут задавать читать "Совершенный код" Макконнелла.


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: V1KT0P от Апрель 06, 2012, 12:25
И что? ...
Да вообще-то ничего. :)
Просто большинство студентов вот так думают и пишут программы, пока не начнут работать над реальными проектами, и с этим ничего не сделаешь, пока в вузах не будут уделять этому внимание, а на дом не будут задавать читать "Совершенный код" Макконнелла.

В смысле? Я работаю над реальными проектами и мне не хочется назвать переменные двумя буквами. Наоборот начинаешь понимать всю прелесть таких вещей как пространство имен, которые в маленьких программах вообще не использовал. А "Совершенны код" хорошая книга, я когда ее читал попутно несколько раз переписывал одну свою программу =). Так сказать применял знания на практике =).


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: iroln от Апрель 06, 2012, 12:33
V1KT0P, я про вас ничего не говорил, вы хороший студент. :)
Я лишь сказал, что большинство студентов не задумываются о таких вещах как качество и читабельность кода, пока не столкнутся с реальной работой.


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: Bepec от Апрель 06, 2012, 14:01
Решается просто - первый же рабочий проект где-нибедь в 10-20к строк :)

А потом его сопровождение. И усё. Сразу прививаются нужные навыки ;)


Название: Re: Изменение Qtextedit [РЕШЕНО]
Отправлено: jatsuk от Апрель 06, 2012, 14:32
Угадали, студент )


С Часто используемыми переменными я так и делаю. И комменты пишу к своему коду, чтобы потом через месяц не забыть про что это было )
Здесь просто слот с 10 строчками кода и вряд ли я его когда нибудь буду исправлять...