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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.2] QTextDocument не сохр. значения свойств  (Прочитано 3043 раз)
ViPeret
Гость
« : Октябрь 16, 2006, 00:55 »

Мне нужно устовить некоторым частям документа в QTextEdit заданные свойства, я это делаю так:
Код:

QTextCursor cur = textEditVisual->textCursor();
cur.beginEditBlock();

QTextFrameFormat frameFormat;
         ......
frameFormat.setProperty(1,"cut");
cur.insertFrame(frameFormat);

QTextBlockFormat blockFormat;
blockFormat.setAlignment(Qt::AlignHCenter);
blockFormat.setProperty(1,"cut");
cur.insertBlock(blockFormat);
...
cur.insertImage(":/misc/images/line.gif");

Т.е. получается Фрейм со свойством "cut" в нем ТекстБлок с таким же свойством и в нем картинка - горизонтальная "линия отрыва" :-) .

Так вот если пользователь выделит весь док-т, вырежет в буфер буфер обмена и вставит, то все свойства назначеные частям докт-та с помощью setProperty теряются... :-(  так это обойти?

А нужно это для генерации по док-ту  BBCode, т.е. фрейм с свойством например "code" преврашается в {code} тест который был во фрейме {/code} и т.д.

И еще - есть ли способ сделать Фрейм в док-те Readonly?
сейчас единственное что придумал - вот такой хак:
Код:

void MainWindow::on_textEditVisual_textChanged() {
if(workInProgress) return;

QTextCursor cur = textEditVisual->textCursor();
QTextBlock block = cur.block();
QTextFrame *frame = cur.currentFrame();

if(frame->frameFormat().stringProperty(1) == "cut") {
workInProgress = true;
textEditVisual->undo();
workInProgress = false;
}
};

Т.е. если текст изменился и курсор стоит в блоке со свойством "cut" вызываю undo и изменения откатываются. Кое-как получилось сделать read-only блок но недостаток что при попытке редактирования появляется redo

добавлено спустя 48 минут:

 Хочу добавить что значение устанавливаемое через QTextBlock::setUserState тоже не сохраняется после вырезания+вставки через Clipboard...
Так же для QTextFrame не сохраняются    setMargin()  и setPadding()...
Записан
ViPeret
Гость
« Ответ #1 : Октябрь 17, 2006, 23:36 »

Попробуйте скомпилировать такой вот тестовый пример:
Код:

#include <QApplication>
#include <QTextEdit>

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);

   QTextEdit editor;
   editor.resize(500, 300);

       QTextCursor cur = editor.textCursor();
       QTextFrameFormat frameFormat;
       frameFormat.setMargin(5);   //  this formating dissapears
       frameFormat.setPadding(5); //
       frameFormat.setBorder(1);
       frameFormat.setBackground(QBrush(QColor("#f5da9a")));
       frameFormat.setProperty(1,"doc"); // this property too
       cur.insertFrame(frameFormat);

   editor.show();
   return app.exec();
}


У меня если выделить все содержимое редактора, вырезать и вставить на место теряются некторорый свойства форматирования QTextFrame. Можете потестить это на других версиях Qt? У меня 4.2
Может это быть бага в Qt или это так и должно быть?
Записан
ViPeret
Гость
« Ответ #2 : Октябрь 19, 2006, 13:25 »

Ну что никто не может подсказать? Я заи..ся уже выискивать где может быть глюк...  
Почему это гребаное форматирование слетат?
Может кто-нибудь на другой верии QT скомпилить приведенный выше пример (у меня 4.2) и сказать есть ли такой эффект?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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