Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Garik от Май 13, 2011, 21:00



Название: Вопрос по QFont!!!
Отправлено: 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();
}

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


Название: Re: Вопрос по QFont!!!
Отправлено: xwicked от Май 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, а потом уже получал / изменял шрифт. Тогда Ваш алгоритм нужно будет чуть подправить.


Название: Re: Вопрос по QFont!!!
Отправлено: Garik от Май 15, 2011, 23:18

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

Спасибо за ответ!!! правда с трудом понял что вы имели в виду!!! но постараюсь рыть в эту сторону!!!


Название: Re: Вопрос по QFont!!!
Отправлено: pastor от Май 15, 2011, 23:30
Взгляни на метод QAbstractTextDocumentLayout::draw(...)


Название: Re: Вопрос по QFont!!!
Отправлено: Garik от Май 16, 2011, 21:04
Взгляни на метод QAbstractTextDocumentLayout::draw(...)

Спс!!! уже гляжу))))


Название: Re: Вопрос по QFont!!!
Отправлено: Garik от Май 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) меняеться (по ширине текста ) прорисовуеться и возращается все в исходное состояние...

Визуально изменения происходят вроде не заметно!!!!!
понимаючто как-то через "непонятно как делаю" и ни совсем правильно!!!!
Может есть инной способ????


Название: Re: Вопрос по QFont!!!
Отправлено: Garik от Май 18, 2011, 20:52
В кратце говоря надо сделать так что-бы текст прорисововался в .bmp файл одной строкой, без переноса, какой бы он длинный небыл???