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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по QFont!!!  (Прочитано 4522 раз)
Garik
Гость
« : Май 13, 2011, 21:00 »

здраствуйте!!! столкнулся с такой задачей никак не могу решить!!!
создаю QTextEdit *textEdit = new  QTextEdit; далее в нем набираю текст НО (например ) одно слово - стиль шрифта  Ubuntu, второе слово  - Pursia. (Меняю их QFontComboBox). Значит имеею textEdit с с текстом из двух слов, разных шрифтов!!!
Вопрос в следующем как СЧИТАТЬ какие шрифты используются в textEdit, так-как использую функцию textEdit->fontFamily() но она показывает только один из выбраных шрифтов!!!
Для чего это мне нужно!!! Просто  дальше все что я написал в textEdit хочу прорисовать в файл,   таким методом
Код:
void MyWidget::mybuttonclick()
{
    qDebug()<<"TextDraw"<<textEdit->toPlainText()<<textEdit->fontFamily();

    QImage img(100,100,QImage::Format_Mono);
    img.fill(Qt::white);

     QPainter painter;
     painter.begin(&img);
     painter.drawText(50,50,textEdit->toPlainText());

     img.save("text.bmp","BMP");
     painter.end();
}

Файл то прорисовуется но  только с одним фоном шрифта?Непонимающий
Записан
xwicked
Гость
« Ответ #1 : Май 15, 2011, 18:59 »

здраствуйте!!! столкнулся с такой задачей никак не могу решить!!!
создаю QTextEdit *textEdit = new  QTextEdit; далее в нем набираю текст НО (например ) одно слово - стиль шрифта  Ubuntu, второе слово  - Pursia. (Меняю их QFontComboBox). Значит имеею textEdit с с текстом из двух слов, разных шрифтов!!!
Вопрос в следующем как СЧИТАТЬ какие шрифты используются в textEdit, так-как использую функцию textEdit->fontFamily() но она показывает только один из выбраных шрифтов!!!
Для чего это мне нужно!!! Просто  дальше все что я написал в textEdit хочу прорисовать в файл,   таким методом
Код:
void MyWidget::mybuttonclick()
{
    qDebug()<<"TextDraw"<<textEdit->toPlainText()<<textEdit->fontFamily();

    QImage img(100,100,QImage::Format_Mono);
    img.fill(Qt::white);

     QPainter painter;
     painter.begin(&img);
     painter.drawText(50,50,textEdit->toPlainText());

     img.save("text.bmp","BMP");
     painter.end();
}

Файл то прорисовуется но  только с одним фоном шрифта?Непонимающий

При работе с QTextEdit я парсил html-код в QString. То есть, выгружал нужный участок в переменную типа QString, а потом уже получал / изменял шрифт. Тогда Ваш алгоритм нужно будет чуть подправить.
Записан
Garik
Гость
« Ответ #2 : Май 15, 2011, 23:18 »


При работе с QTextEdit я парсил html-код в QString. То есть, выгружал нужный участок в переменную типа QString, а потом уже получал / изменял шрифт. Тогда Ваш алгоритм нужно будет чуть подправить.
[/quote]

Спасибо за ответ!!! правда с трудом понял что вы имели в виду!!! но постараюсь рыть в эту сторону!!!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Май 15, 2011, 23:30 »

Взгляни на метод QAbstractTextDocumentLayout::draw(...)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Garik
Гость
« Ответ #4 : Май 16, 2011, 21:04 »

Взгляни на метод QAbstractTextDocumentLayout::draw(...)

Спс!!! уже гляжу))))
Записан
Garik
Гость
« Ответ #5 : Май 18, 2011, 12:53 »


помог мне метод QAbstractTextDocumentLayout  получил что хотел)))
теперь пытаюсь добить свою задачу так-как требуеться сделать что-бы документ прорисов. в одну строку, я зделал вот таким обмануты способом, не знаю может можно и иначе???

Код:
      void MyWidget::mybuttonclick()
      {
          QTextDocument *document = textEdit->document();
       
          QFontMetrics metrics(textEdit->currentFont());
          document->setTextWidth(metrics.width(textEdit->toPlainText())+10); // устанавливаю длину документа в соответствии с длиной набираемого
                                                                             // текста
          QImage img(document->textWidth(),100,QImage::Format_Mono); //
       
          img.fill(Qt::white);
       
          QPainter p(&img);
          p.save();
       
          QAbstractTextDocumentLayout *l=document->documentLayout();
          QAbstractTextDocumentLayout::PaintContext ctx;
       
          QRect rect(0,0, document->textWidth(),100);
          p.setClipRect(rect);
          ctx.clip=rect;
       
          l->draw(&p, ctx);
       
          img.save("new.bmp","BMP");
          p.restore();
       
      document->setTextWidth(412); // возращаю ширину документа в противоположное тзначение какое было выставленно заранее
       
      }

Таким методом выходит что в момент нажатия кнопки ширина документа (а сним и TextEditor) меняеться (по ширине текста ) прорисовуеться и возращается все в исходное состояние...

Визуально изменения происходят вроде не заметно!!!!!
понимаючто как-то через "непонятно как делаю" и ни совсем правильно!!!!
Может есть инной способ?Непонимающий
Записан
Garik
Гость
« Ответ #6 : Май 18, 2011, 20:52 »

В кратце говоря надо сделать так что-бы текст прорисововался в .bmp файл одной строкой, без переноса, какой бы он длинный небыл???
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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