本文整理汇总了C++中QTextFragment::text方法的典型用法代码示例。如果您正苦于以下问题:C++ QTextFragment::text方法的具体用法?C++ QTextFragment::text怎么用?C++ QTextFragment::text使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QTextFragment
的用法示例。
在下文中一共展示了QTextFragment::text方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fileNameFromDiffSpecification
QString MercurialEditor::fileNameFromDiffSpecification(const QTextBlock &diffFileSpec) const
{
const QString filechangeId(QLatin1String("+++ b/"));
QTextBlock::iterator iterator;
for (iterator = diffFileSpec.begin(); !(iterator.atEnd()); iterator++) {
QTextFragment fragment = iterator.fragment();
if(fragment.isValid()) {
if (fragment.text().startsWith(filechangeId)) {
const QString filename = fragment.text().remove(0, filechangeId.size());
return findDiffFile(filename, MercurialPlugin::instance()->versionControl());
}
}
}
return QString();
}
示例2: readFragment
void XmlWriter::readFragment(const QTextBlock ¤tBlock,
QDomElement blockElement,
QDomDocument *document)
{
//! [3] //! [4]
QTextBlock::iterator it;
for (it = currentBlock.begin(); !(it.atEnd()); ++it) {
QTextFragment currentFragment = it.fragment();
if (currentFragment.isValid())
//! [3] //! [5]
processFragment(currentFragment);
//! [4] //! [5]
if (currentFragment.isValid()) {
QDomElement fragmentElement = document->createElement("fragment");
blockElement.appendChild(fragmentElement);
fragmentElement.setAttribute("length", currentFragment.length());
QDomText fragmentText = document->createTextNode(currentFragment.text());
fragmentElement.appendChild(fragmentText);
}
//! [6] //! [7]
}
//! [7] //! [6]
}
示例3: parse
FormattedMessage FormattedMessage::parse(const QTextDocument *document)
{
FormattedMessage result;
QString text;
QTextBlock block = document->firstBlock();
bool firstParagraph = true;
while (block.isValid())
{
bool firstFragment = true;
for (QTextBlock::iterator it = block.begin(); !it.atEnd(); ++it)
{
QTextFragment fragment = it.fragment();
if (!fragment.isValid())
continue;
if (!firstParagraph && firstFragment)
text = '\n' + fragment.text();
else
text = fragment.text();
QTextCharFormat format = fragment.charFormat();
parseImages(result, text,
format.font().bold(),
format.font().italic(),
format.font().underline(),
format.foreground().color());
firstFragment = false;
}
if (firstFragment)
parseImages(result, "\n", false, false, false, QColor());
block = block.next();
firstParagraph = false;
}
return result;
}
示例4: setHtml
/*!
Replaces the entire contents of the document
with the given HTML-formatted text in the \a text string
*/
void RichString::setHtml(const QString &text)
{
QTextDocument doc;
doc.setHtml(text);
QTextBlock block = doc.firstBlock();
QTextBlock::iterator it;
for (it = block.begin(); !(it.atEnd()); ++it) {
QTextFragment textFragment = it.fragment();
if (textFragment.isValid()) {
Format fmt;
fmt.setFont(textFragment.charFormat().font());
fmt.setFontColor(textFragment.charFormat().foreground().color());
addFragment(textFragment.text(), fmt);
}
}
}
示例5: processBlock
void XmlWriter::processBlock(QDomElement &parent, const QTextBlock &block)
{
QDomElement blockElement = document->createElement("block");
blockElement.setAttribute("position", block.position());
blockElement.setAttribute("length", block.length());
parent.appendChild(blockElement);
QTextBlock::iterator it;
for (it = block.begin(); !(it.atEnd()); ++it) {
QTextFragment fragment = it.fragment();
if (fragment.isValid()) {
QDomElement fragmentElement = document->createElement("fragment");
blockElement.appendChild(fragmentElement);
fragmentElement.setAttribute("length", fragment.length());
QDomText fragmentText = document->createTextNode(fragment.text());
fragmentElement.appendChild(fragmentText);
}
}
}
示例6: toSimpleHtml
QString RichTextLineEdit::toSimpleHtml() const
{
QString html;
for (QTextBlock block = document()->begin(); block.isValid();
block = block.next()) {
for (QTextBlock::iterator i = block.begin(); !i.atEnd();
++i) {
QTextFragment fragment = i.fragment();
if (fragment.isValid()) {
QTextCharFormat format = fragment.charFormat();
QColor color = format.foreground().color();
//QString text = Qt::escape(fragment.text()); //deleted for Qt5
QString text = QString(fragment.text()).toHtmlEscaped(); //added for Qt5
QStringList tags;
if (format.verticalAlignment() ==
QTextCharFormat::AlignSubScript)
tags << "sub";
else if (format.verticalAlignment() ==
QTextCharFormat::AlignSuperScript)
tags << "sup";
if (format.fontItalic())
tags << "i";
if (format.fontWeight() > QFont::Normal)
tags << "b";
if (format.fontStrikeOut())
tags << "s";
while (!tags.isEmpty())
text = QString("<%1>%2</%1>")
.arg(tags.takeFirst()).arg(text);
if (color != QColor(Qt::black))
text = QString("<font color=\"%1\">%2</font>")
.arg(color.name()).arg(text);
html += text;
}
}
}
return html;
}
示例7: processFragment
QString TextDocumentSerializer::processFragment(QTextFragment fragment)
{
QTextCharFormat format = fragment.charFormat();
QString text = fragment.text();
if(format.isImageFormat())
text = getImageTag(format.toImageFormat());
if(format.fontFamily().contains("Courier"))
text = QString("<code>%1</code>").arg(text);
if(format.fontWeight() == QFont::Bold)
text = QString("<b>%1</b>").arg(text);
if(format.fontItalic())
text = QString("<i>%1</i>").arg(text);
text = text.replace(QChar(0x2028), "<br>");
return text;
}
示例8: toStringFromDocument
QString Dialog::toStringFromDocument() {
QTextDocument *doc = message()->document();
QString txt;
for (QTextBlock bl = doc->begin(); bl != doc->end(); bl = bl.next())
if (bl.isValid()) {
for (QTextBlock::iterator it = bl.begin(); !it.atEnd(); ++it) {
QTextFragment fragm = it.fragment();
if (fragm.isValid() && fragm.charFormat().isImageFormat()) {
QString imgName = fragm.charFormat().toImageFormat().name();
txt += imgName;
} else if (fragm.isValid())
txt += fragm.text();
}
if (bl != doc->begin())
txt += "\n";
}
int i = (int)txt.size() - 1;
while (i >= 0 && (txt[i] == ' ' || txt[i] == '\n')) --i;
txt.remove(i + 1, txt.size() - i - 1);
return txt;
}
示例9: addTextBlock
void QSGTextNode::addTextBlock(const QPointF &position, QTextDocument *textDocument, const QTextBlock &block,
const QColor &overrideColor, QSGText::TextStyle style, const QColor &styleColor)
{
if (!block.isValid())
return;
QPointF blockPosition = textDocument->documentLayout()->blockBoundingRect(block).topLeft();
QTextBlock::iterator it = block.begin();
while (!it.atEnd()) {
QTextFragment fragment = it.fragment();
if (!fragment.text().isEmpty()) {
QTextCharFormat charFormat = fragment.charFormat();
QColor color = overrideColor.isValid()
? overrideColor
: charFormat.foreground().color();
QList<QGlyphRun> glyphsList = fragment.glyphRuns();
for (int i=0; i<glyphsList.size(); ++i) {
QGlyphRun glyphs = glyphsList.at(i);
QRawFont font = glyphs.rawFont();
QSGGlyphNode *glyphNode = addGlyphs(position + blockPosition + QPointF(0, font.ascent()),
glyphs, color, style, styleColor);
int decorations = (glyphs.overline() ? Overline : 0) |
(glyphs.strikeOut() ? StrikeOut : 0) |
(glyphs.underline() ? Underline : 0);
if (decorations) {
QPointF baseLine = glyphNode->baseLine();
qreal width = glyphNode->boundingRect().width();
addTextDecorations(Decoration(decorations), baseLine, color, width,
font.lineThickness(), font.underlinePosition(), font.ascent());
}
}
}
++it;
}
}
示例10: addTextBlock
void QQuickTextNodeEngine::addTextBlock(QTextDocument *textDocument, const QTextBlock &block, const QPointF &position, const QColor &textColor, const QColor &anchorColor, int selectionStart, int selectionEnd)
{
Q_ASSERT(textDocument);
#ifndef QT_NO_IM
int preeditLength = block.isValid() ? block.layout()->preeditAreaText().length() : 0;
int preeditPosition = block.isValid() ? block.layout()->preeditAreaPosition() : -1;
#endif
QVarLengthArray<QTextLayout::FormatRange> colorChanges;
mergeFormats(block.layout(), &colorChanges);
QPointF blockPosition = textDocument->documentLayout()->blockBoundingRect(block).topLeft() + position;
if (QTextList *textList = block.textList()) {
QPointF pos = blockPosition;
QTextLayout *layout = block.layout();
if (layout->lineCount() > 0) {
QTextLine firstLine = layout->lineAt(0);
Q_ASSERT(firstLine.isValid());
setCurrentLine(firstLine);
QRectF textRect = firstLine.naturalTextRect();
pos += textRect.topLeft();
if (block.textDirection() == Qt::RightToLeft)
pos.rx() += textRect.width();
const QTextCharFormat charFormat = block.charFormat();
QFont font(charFormat.font());
QFontMetricsF fontMetrics(font);
QTextListFormat listFormat = textList->format();
QString listItemBullet;
switch (listFormat.style()) {
case QTextListFormat::ListCircle:
listItemBullet = QChar(0x25E6); // White bullet
break;
case QTextListFormat::ListSquare:
listItemBullet = QChar(0x25AA); // Black small square
break;
case QTextListFormat::ListDecimal:
case QTextListFormat::ListLowerAlpha:
case QTextListFormat::ListUpperAlpha:
case QTextListFormat::ListLowerRoman:
case QTextListFormat::ListUpperRoman:
listItemBullet = textList->itemText(block);
break;
default:
listItemBullet = QChar(0x2022); // Black bullet
break;
};
QSizeF size(fontMetrics.width(listItemBullet), fontMetrics.height());
qreal xoff = fontMetrics.width(QLatin1Char(' '));
if (block.textDirection() == Qt::LeftToRight)
xoff = -xoff - size.width();
setPosition(pos + QPointF(xoff, 0));
QTextLayout layout;
layout.setFont(font);
layout.setText(listItemBullet); // Bullet
layout.beginLayout();
QTextLine line = layout.createLine();
line.setPosition(QPointF(0, 0));
layout.endLayout();
QList<QGlyphRun> glyphRuns = layout.glyphRuns();
for (int i=0; i<glyphRuns.size(); ++i)
addUnselectedGlyphs(glyphRuns.at(i));
}
}
int textPos = block.position();
QTextBlock::iterator blockIterator = block.begin();
while (!blockIterator.atEnd()) {
QTextFragment fragment = blockIterator.fragment();
QString text = fragment.text();
if (text.isEmpty())
continue;
QTextCharFormat charFormat = fragment.charFormat();
QFont font(charFormat.font());
QFontMetricsF fontMetrics(font);
int fontHeight = fontMetrics.descent() + fontMetrics.ascent();
int valign = charFormat.verticalAlignment();
if (valign == QTextCharFormat::AlignSuperScript)
setPosition(QPointF(blockPosition.x(), blockPosition.y() - fontHeight / 2));
else if (valign == QTextCharFormat::AlignSubScript)
setPosition(QPointF(blockPosition.x(), blockPosition.y() + fontHeight / 6));
else
setPosition(blockPosition);
if (text.contains(QChar::ObjectReplacementCharacter)) {
QTextFrame *frame = qobject_cast<QTextFrame *>(textDocument->objectForFormat(charFormat));
if (frame && frame->frameFormat().position() == QTextFrameFormat::InFlow) {
int blockRelativePosition = textPos - block.position();
QTextLine line = block.layout()->lineForTextPosition(blockRelativePosition);
if (!currentLine().isValid()
|| line.lineNumber() != currentLine().lineNumber()) {
//.........这里部分代码省略.........
示例11: getPlainText
QString TextEditEx::getPlainText(int _from, int _to) const
{
if (_from == _to)
return "";
if (_to != -1 && _to < _from)
{
assert(!"invalid data");
return "";
}
QString out_string;
QTextStream result(&out_string);
int pos_start = 0;
int length = 0;
bool first = true;
for (QTextBlock it_block = document()->begin(); it_block != document()->end(); it_block = it_block.next())
{
if (!first)
result << '\n';
pos_start = it_block.position();
if (_to != -1 && pos_start >= _to)
break;
for (QTextBlock::iterator it_fragment = it_block.begin(); it_fragment != it_block.end(); ++it_fragment)
{
QTextFragment currentFragment = it_fragment.fragment();
if (currentFragment.isValid())
{
pos_start = currentFragment.position();
length = currentFragment.length();
if (pos_start + length <= _from)
continue;
if (_to != -1 && pos_start >= _to)
break;
first = false;
if (currentFragment.charFormat().isImageFormat())
{
if (pos_start < _from)
continue;
QTextImageFormat imgFmt = currentFragment.charFormat().toImageFormat();
auto iter = resource_index_.find(imgFmt.name());
if (iter != resource_index_.end())
result << iter->second;
}
else
{
QString fragment_text = currentFragment.text();
int c_start = std::max((_from - pos_start), 0);
int count = -1;
if (_to != -1 && _to <= pos_start + length)
count = _to - pos_start - c_start;
QString txt = fragment_text.mid(c_start, count);
txt.remove(QChar::SoftHyphen);
QChar *uc = txt.data();
QChar *e = uc + txt.size();
for (; uc != e; ++uc) {
switch (uc->unicode()) {
case 0xfdd0: // QTextBeginningOfFrame
case 0xfdd1: // QTextEndOfFrame
case QChar::ParagraphSeparator:
case QChar::LineSeparator:
*uc = QLatin1Char('\n');
break;
case QChar::Nbsp:
*uc = QLatin1Char(' ');
break;
default:
;
}
}
result << txt;
}
}
}
}
return out_string;
}
示例12: appendToHistory
void Dialog::appendToHistory(const QString& name, const QDateTime& sendTime, QTextDocument *document, InsertingMode mode) {
QListWidgetItem *item = new QListWidgetItem();
QTextEdit *te = new QTextEdit();
lwHistory->addItem(item);
te->setReadOnly(true);
reloadResource(te);
lwHistory->setItemWidget(item, te);
QString color;
if (name == "You")
color = "blue";
else
color = "red";
te->append(QString("<font color = \"%1\"> <b>" + name + "</b> (" + sendTime.toString("dd-MM-yyyy hh:mm:ss") + "):</font>").arg(color));
te->moveCursor(QTextCursor::End);
te->textCursor().insertBlock();
te->textCursor().insertFragment(QTextDocumentFragment(document));
int heig = 17, widthTe = parentWidget()->width();
int curLine = 0;
int mx = 0;
for (QTextBlock bl = te->document()->begin(); bl != te->document()->end(); bl = bl.next())
if (bl.isValid()) {
if (bl.begin().atEnd()) {
heig += 17 + mx;//&&&
curLine = mx = 0;
continue;
}
for (QTextBlock::iterator it = bl.begin(); !it.atEnd(); ++it) {
QTextFragment fragm = it.fragment();
int curw, curh;
if (fragm.isValid() && fragm.charFormat().isImageFormat()) {
curw = smiles->width() / W_CNT;
curh = smiles->height() / H_CNT;
processCalc(heig, mx, curLine, curw, curh);
} else if (fragm.isValid()) {
QString s = fragm.text();
QFontMetrics me(fragm.charFormat().font());
curh = me.lineSpacing();
for (int j = 0; j < s.size(); ++j) {
curw = me.width(s[j]);
processCalc(heig, mx, curLine, curw, curh);
}
}
}
heig += mx;
mx = curLine = 0;
}
te->setStyleSheet(QString("QFrame {"
"border: 2px solid #f3f2f1;"
"border-radius: 4px;"
"padding: 2px;}"));
item->setSizeHint(QSize(0, heig + 18));
te->resize(QSize(widthTe, heig));
lwHistory->scrollToBottom();
if (mode == ReceivedMessage && !dgReadByUser) {
setUnreadMessage(unreadMessage + 1);
queUnreadWrote.push_back(te);
te->setStyleSheet("QTextEdit { background-color: #FFFCCC; }");
} else if (mode == LoadHistory) {
if (unreadMessage != 0) {
queUnreadWrote.push_back(te);
te->setStyleSheet("QTextEdit { background-color: #FFFCCC; }");
if (queUnreadWrote.size() > unreadMessage) {
queUnreadWrote.front()->setStyleSheet("QTextEdit { background-color: #FFFFFF; }");
queUnreadWrote.pop_front();
}
}
if (wroteMessage != 0) {
queUnreadWrote.push_back(te);
te->setStyleSheet("QTextEdit { background-color: #DFFFCC; }");
if (queUnreadWrote.size() > wroteMessage) {
queUnreadWrote.front()->setStyleSheet("QTextEdit { background-color: #FFFFFF; }");
queUnreadWrote.pop_front();
}
}
} else if (mode == SendMessage) {
teMessage->setFocus();
te->setStyleSheet("QTextEdit { background-color: #DFFFCC; }");
wroteMessage++;
queUnreadWrote.push_back(te);
}
}
示例13: stubDrawText
//绘制stub面板上的显示效果 只显示恶性数据竞争的那一行
void DrcDockWidget::stubDrawText()
{
QTextDocument *document = ui->resultStubEdit->document();
QTextBlock currentBlock = document->begin();
QTextBlock::iterator it;
QTextCursor cursor = ui->resultStubEdit->textCursor();
//此处需要注意的是临时变量的生命周期!!!
QString tempStr;
int tempPos;
while( true)
{
// 在修改chatformat时会改变当前Block的fragment
// 所以++it的处理类似std::map中的erase操作
for (it = currentBlock.begin(); !(it.atEnd()); )
{
QTextFragment currentFragment = it.fragment();
if (currentFragment.isValid())
{
++it;
int pos = currentFragment.position();
QString strText = currentFragment.text();
QTextCharFormat fmt;
QFont font;
font.setBold(true);
fmt.setFont(font);
fmt.setForeground(QBrush(QColor(255, 0, 0)));
QTextCursor helper = cursor;
char str = strText.at(0).toLatin1();
if(str == 'A')
{
QString strPart2 = strText.split(':').at(1);
if(strPart2.toInt() == 1)
{
helper.setPosition(tempPos);
helper.setPosition(tempPos + tempStr.length(), QTextCursor::KeepAnchor);
helper.setCharFormat(fmt);
helper.setPosition(pos);
helper.setPosition(pos + strText.length(), QTextCursor::KeepAnchor);
helper.setCharFormat(fmt);
}
}
else
{
tempStr = strText;
tempPos = pos;
}
}
}
currentBlock = currentBlock.next();
if(!currentBlock.isValid())
break;
}
// 光标移动到最后, 并设置拥有焦点
QTextCursor c = ui->resultStubEdit->textCursor();
c.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
ui->resultStubEdit->setTextCursor(c);
ui->resultStubEdit->setFocus(Qt::MouseFocusReason);
}
示例14: par
bool RTF::Writer::write(QIODevice* device, QTextDocument* text)
{
if (m_codec == 0) {
return false;
}
device->write(m_header);
for (QTextBlock block = text->begin(); block.isValid(); block = block.next()) {
QByteArray par("{\\pard\\plain");
QTextBlockFormat block_format = block.blockFormat();
bool rtl = block_format.layoutDirection() == Qt::RightToLeft;
if (rtl) {
par += "\\rtlpar";
}
Qt::Alignment align = block_format.alignment();
if (rtl && (align & Qt::AlignLeft)) {
par += "\\ql";
} else if (align & Qt::AlignRight) {
par += "\\qr";
} else if (align & Qt::AlignCenter) {
par += "\\qc";
} else if (align & Qt::AlignJustify) {
par += "\\qj";
}
if (block_format.indent() > 0) {
par += "\\li" + QByteArray::number(block_format.indent() * 15);
}
device->write(par);
if (block.begin() != block.end()) {
device->write(" ");
for (QTextBlock::iterator iter = block.begin(); iter != block.end(); ++iter) {
QTextFragment fragment = iter.fragment();
QTextCharFormat char_format = fragment.charFormat();
QByteArray style;
if (char_format.fontWeight() == QFont::Bold) {
style += "\\b";
}
if (char_format.fontItalic()) {
style += "\\i";
}
if (char_format.fontUnderline()) {
style += "\\ul";
}
if (char_format.fontStrikeOut()) {
style += "\\strike";
}
if (char_format.verticalAlignment() == QTextCharFormat::AlignSuperScript) {
style += "\\super";
} else if (char_format.verticalAlignment() == QTextCharFormat::AlignSubScript) {
style += "\\sub";
}
if (!style.isEmpty()) {
device->write("{" + style + " " + fromUnicode(fragment.text()) + "}");
} else {
device->write(fromUnicode(fragment.text()));
}
}
}
device->write("\\par}\n");
}
device->write("\n}");
return true;
}
示例15: writeBody
void OdtWriter::writeBody(const QTextDocument* document)
{
m_xml.writeStartElement(QString::fromLatin1("office:body"));
m_xml.writeStartElement(QString::fromLatin1("office:text"));
for (QTextBlock block = document->begin(); block.isValid(); block = block.next()) {
int heading = block.blockFormat().property(QTextFormat::UserProperty).toInt();
if (!heading) {
m_xml.writeStartElement(QString::fromLatin1("text:p"));
} else {
m_xml.writeStartElement(QString::fromLatin1("text:h"));
m_xml.writeAttribute(QString::fromLatin1("text:outline-level"), QString::number(heading));
}
m_xml.writeAttribute(QString::fromLatin1("text:style-name"), m_styles.value(block.blockFormatIndex()));
m_xml.setAutoFormatting(false);
for (QTextBlock::iterator iter = block.begin(); !(iter.atEnd()); ++iter) {
QTextFragment fragment = iter.fragment();
QString style = m_styles.value(fragment.charFormatIndex());
if (!style.isEmpty()) {
m_xml.writeStartElement(QString::fromLatin1("text:span"));
m_xml.writeAttribute(QString::fromLatin1("text:style-name"), style);
}
QString text = fragment.text();
int start = 0;
int spaces = -1;
for (int i = 0; i < text.length(); ++i) {
QChar c = text.at(i);
if (c.unicode() == 0x0009) {
m_xml.writeCharacters(text.mid(start, i - start));
m_xml.writeEmptyElement(QString::fromLatin1("text:tab"));
start = i + 1;
} else if (c.unicode() == 0x2028) {
m_xml.writeCharacters(text.mid(start, i - start));
m_xml.writeEmptyElement(QString::fromLatin1("text:line-break"));
start = i + 1;
} else if (c.unicode() == 0x0020) {
++spaces;
} else if (spaces > 0) {
m_xml.writeCharacters(text.mid(start, i - spaces - start));
m_xml.writeEmptyElement(QString::fromLatin1("text:s"));
m_xml.writeAttribute(QString::fromLatin1("text:c"), QString::number(spaces));
spaces = -1;
start = i;
} else {
spaces = -1;
}
}
if (spaces > 0) {
m_xml.writeCharacters(text.mid(start, text.length() - spaces - start));
m_xml.writeEmptyElement(QString::fromLatin1("text:s"));
m_xml.writeAttribute(QString::fromLatin1("text:c"), QString::number(spaces));
} else {
m_xml.writeCharacters(text.mid(start));
}
if (!style.isEmpty()) {
m_xml.writeEndElement();
}
}
m_xml.writeEndElement();
m_xml.setAutoFormatting(true);
}
m_xml.writeEndElement();
m_xml.writeEndElement();
}