本文整理汇总了C++中QTextBlock::position方法的典型用法代码示例。如果您正苦于以下问题:C++ QTextBlock::position方法的具体用法?C++ QTextBlock::position怎么用?C++ QTextBlock::position使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QTextBlock
的用法示例。
在下文中一共展示了QTextBlock::position方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: changeUnderCursor
QString CVSEditor::changeUnderCursor(const QTextCursor &c) const
{
// Try to match "1.1" strictly:
// 1) Annotation: Check for a revision number at the beginning of the line.
// Note that "cursor.select(QTextCursor::WordUnderCursor)" will
// only select the part up until the dot.
// Check if we are at the beginning of a line within a reasonable offset.
// 2) Log: check for lines like "revision 1.1", cursor past "revision"
switch (contentType()) {
case VCSBase::RegularCommandOutput:
case VCSBase::DiffOutput:
break;
case VCSBase::AnnotateOutput: {
const QTextBlock block = c.block();
if (c.atBlockStart() || (c.position() - block.position() < 3)) {
const QString line = block.text();
if (m_revisionAnnotationPattern.exactMatch(line))
return m_revisionAnnotationPattern.cap(1);
}
}
break;
case VCSBase::LogOutput: {
const QTextBlock block = c.block();
if (c.position() - block.position() > 8 && m_revisionLogPattern.exactMatch(block.text()))
return m_revisionLogPattern.cap(1);
}
break;
}
return QString();
}
示例2: insert_head
void MarkdownEdit::insert_head(const QString &tag, bool blockStart)
{
QTextCursor cur = m_ed->textCursor();
cur.beginEditBlock();
if (cur.hasSelection()) {
QTextBlock begin = m_ed->document()->findBlock(cur.selectionStart());
QTextBlock end = m_ed->document()->findBlock(cur.selectionEnd());
if (end.position() == cur.selectionEnd()) {
end = end.previous();
}
QTextBlock block = begin;
do {
if (block.text().length() > 0) {
if (blockStart) {
cur.setPosition(block.position());
} else {
QString text = block.text();
foreach(QChar c, text) {
if (!c.isSpace()) {
cur.setPosition(block.position()+text.indexOf(c));
break;
}
}
}
cur.insertText(tag);
}
block = block.next();
} while(block.isValid() && block.position() <= end.position());
} else {
示例3: EnumEditor
void EditorUtil::EnumEditor(QPlainTextEdit *ed, EnumEditorProc proc, void *param)
{
if (!ed) {
return;
}
QTextCursor cur = ed->textCursor();
cur.beginEditBlock();
if (cur.hasSelection()) {
QTextBlock begin = ed->document()->findBlock(cur.selectionStart());
QTextBlock end = ed->document()->findBlock(cur.selectionEnd());
if (end.position() == cur.selectionEnd()) {
end = end.previous();
}
QTextBlock block = begin;
do {
if (block.text().length() > 0) {
proc(cur,block,param);
}
block = block.next();
} while(block.isValid() && block.position() <= end.position());
} else {
QTextBlock block = cur.block();
proc(cur,block,param);
}
cur.endEditBlock();
ed->setTextCursor(cur);
}
示例4: toggleFold
void CodeEditor::toggleFold(const QTextBlock &startBlock)
{
#ifdef HAVE_SYNTAX_HIGHLIGHTING
// we also want to fold the last line of the region, therefore the ".next()"
const auto endBlock = m_highlighter->findFoldingRegionEnd(startBlock).next();
if (isFolded(startBlock)) {
// unfold
auto block = startBlock.next();
while (block.isValid() && !block.isVisible()) {
block.setVisible(true);
block.setLineCount(block.layout()->lineCount());
block = block.next();
}
} else {
// fold
auto block = startBlock.next();
while (block.isValid() && block != endBlock) {
block.setVisible(false);
block.setLineCount(0);
block = block.next();
}
}
// redraw document
document()->markContentsDirty(startBlock.position(), endBlock.position() - startBlock.position() + 1);
// update scrollbars
emit document()->documentLayout()->documentSizeChanged(document()->documentLayout()->documentSize());
#else
Q_UNUSED(startBlock);
#endif
}
示例5: findBraceLeft
int SoTextEdit::findBraceLeft(void)
{
QTextCursor cursor = textCursor();
QTextBlock block = cursor.block();
int brace_count = 0, i, blockNumber = block.blockNumber();
QString text;
while (blockNumber != UNVALID_BLOCK) {
text = block.text();
i = text.size();
for (; 0 <= i; i--) {
if (text[i] == QChar('}')) {
brace_count++;
} else if (text[i] == QChar('{')) {
brace_count--;
if (brace_count == 0) {
// cursor.deletePreviousChar();
// cursor.insertText("}", colorFormat(Qt::darkCyan));
cursor.setPosition((block.position()) + i);
// cursor.deleteChar();
// cursor.insertText("{", colorFormat(Qt::darkCyan));
return (block.position() + i);
}
}
}
block = block.previous();
blockNumber = block.blockNumber();
}
return -1;
}
示例6: findNextBlockClosingParenthesis
bool TextBlockUserData::findNextBlockClosingParenthesis(QTextCursor *cursor)
{
QTextBlock block = cursor->block();
int position = cursor->position();
int ignore = 0;
while (block.isValid()) {
Parentheses parenList = BaseTextDocumentLayout::parentheses(block);
if (!parenList.isEmpty() && !BaseTextDocumentLayout::ifdefedOut(block)) {
for (int i = 0; i < parenList.count(); ++i) {
Parenthesis paren = parenList.at(i);
if (paren.chr != QLatin1Char('{') && paren.chr != QLatin1Char('}')
&& paren.chr != QLatin1Char('+') && paren.chr != QLatin1Char('-')
&& paren.chr != QLatin1Char('[') && paren.chr != QLatin1Char(']'))
continue;
if (block == cursor->block() &&
(position - block.position() > paren.pos - (paren.type == Parenthesis::Opened ? 1 : 0)))
continue;
if (paren.type == Parenthesis::Opened) {
++ignore;
} else if (ignore > 0) {
--ignore;
} else {
cursor->setPosition(block.position() + paren.pos+1);
return true;
}
}
}
block = block.next();
}
return false;
}
示例7: _q_reformatBlocks
void QSyntaxHighlighterPrivate::_q_reformatBlocks(int from, int charsRemoved, int charsAdded)
{
Q_UNUSED(charsRemoved);
rehighlightPending = false;
QTextBlock block = doc->findBlock(from);
if (!block.isValid())
return;
int endPosition;
QTextBlock lastBlock = doc->findBlock(from + charsAdded);
if (lastBlock.isValid())
endPosition = lastBlock.position() + lastBlock.length();
else
endPosition = doc->docHandle()->length();
bool forceHighlightOfNextBlock = false;
while (block.isValid() && (block.position() < endPosition || forceHighlightOfNextBlock)) {
const int stateBeforeHighlight = block.userState();
reformatBlock(block);
forceHighlightOfNextBlock = (block.userState() != stateBeforeHighlight);
block = block.next();
}
formatChanges.clear();
}
示例8: findPreviousOpenParenthesis
bool TextBlockUserData::findPreviousOpenParenthesis(QTextCursor *cursor, bool select, bool onlyInCurrentBlock)
{
QTextBlock block = cursor->block();
int position = cursor->position();
int ignore = 0;
while (block.isValid()) {
Parentheses parenList = BaseTextDocumentLayout::parentheses(block);
if (!parenList.isEmpty() && !BaseTextDocumentLayout::ifdefedOut(block)) {
for (int i = parenList.count()-1; i >= 0; --i) {
Parenthesis paren = parenList.at(i);
if (block == cursor->block() &&
(position - block.position() <= paren.pos + (paren.type == Parenthesis::Closed ? 1 : 0)))
continue;
if (paren.type == Parenthesis::Closed) {
++ignore;
} else if (ignore > 0) {
--ignore;
} else {
cursor->setPosition(block.position() + paren.pos, select ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor);
return true;
}
}
}
if (onlyInCurrentBlock)
return false;
block = block.previous();
}
return false;
}
示例9: findPreviousBlockOpenParenthesis
bool TextBlockUserData::findPreviousBlockOpenParenthesis(QTextCursor *cursor, bool checkStartPosition)
{
QTextBlock block = cursor->block();
int position = cursor->position();
int ignore = 0;
while (block.isValid()) {
Parentheses parenList = BaseTextDocumentLayout::parentheses(block);
if (!parenList.isEmpty() && !BaseTextDocumentLayout::ifdefedOut(block)) {
for (int i = parenList.count()-1; i >= 0; --i) {
Parenthesis paren = parenList.at(i);
if (paren.chr != QLatin1Char('{') && paren.chr != QLatin1Char('}')
&& paren.chr != QLatin1Char('+') && paren.chr != QLatin1Char('-')
&& paren.chr != QLatin1Char('[') && paren.chr != QLatin1Char(']'))
continue;
if (block == cursor->block()) {
if (position - block.position() <= paren.pos + (paren.type == Parenthesis::Closed ? 1 : 0))
continue;
if (checkStartPosition && paren.type == Parenthesis::Opened && paren.pos== cursor->position()) {
return true;
}
}
if (paren.type == Parenthesis::Closed) {
++ignore;
} else if (ignore > 0) {
--ignore;
} else {
cursor->setPosition(block.position() + paren.pos);
return true;
}
}
}
block = block.previous();
}
return false;
}
示例10: getActiveStatement
QString QueryPanel::getActiveStatement(int block, int col) {
int from = 0, to = -1;
State st;
QTextBlock b = editor->document()->findBlockByNumber(block);
int scol = col;
while(b.isValid()) {
st.opaque = b.userState();
if(st.s.col != -1 && st.s.col < scol) {
from = b.position() + st.s.col + 1;
break;
}
scol = INT_MAX;
b = b.previous();
}
b = editor->document()->findBlockByNumber(block);
scol = col;
while(b.isValid()) {
st.opaque = b.userState();
if(st.s.col != -1 && st.s.col >= scol) {
to = b.position() + st.s.col;
break;
}
scol = 0;
b = b.next();
}
QString all = editor->document()->toPlainText();
if(to < 0)
to = all.length();
return all.mid(from,to);;
}
示例11: calculateBoundingRect
static void calculateBoundingRect( QTextDocument *document, int startPosition, int endPosition,
QRectF &rect )
{
const QTextBlock startBlock = document->findBlock( startPosition );
const QRectF startBoundingRect = document->documentLayout()->blockBoundingRect( startBlock );
const QTextBlock endBlock = document->findBlock( endPosition );
const QRectF endBoundingRect = document->documentLayout()->blockBoundingRect( endBlock );
QTextLayout *startLayout = startBlock.layout();
QTextLayout *endLayout = endBlock.layout();
int startPos = startPosition - startBlock.position();
int endPos = endPosition - endBlock.position();
const QTextLine startLine = startLayout->lineForTextPosition( startPos );
const QTextLine endLine = endLayout->lineForTextPosition( endPos );
double x = startBoundingRect.x() + startLine.cursorToX( startPos );
double y = startBoundingRect.y() + startLine.y();
double r = endBoundingRect.x() + endLine.cursorToX( endPos );
double b = endBoundingRect.y() + endLine.y() + endLine.height();
const QSizeF size = document->size();
rect = QRectF( x / size.width(), y / size.height(),
(r - x) / size.width(), (b - y) / size.height() );
}
示例12: showMatchingBrackets
void TikzEditor::showMatchingBrackets()
{
for (QTextBlock block = firstVisibleBlock(); block.isValid(); block = block.next())
{
if (blockBoundingGeometry(block).top() > viewport()->height())
break;
const QString text = block.text();
const int textLength = text.length();
for (int i = 0; i < textLength; ++i)
{
if (block.position() + i == m_matchingBegin || block.position() + i == m_matchingEnd)
{
QList<QTextEdit::ExtraSelection> extraSelectionList = extraSelections();
if (!isReadOnly())
{
QTextEdit::ExtraSelection selection;
selection.format.setBackground(m_matchingColor);
selection.cursor = textCursor();
selection.cursor.setPosition(block.position() + i, QTextCursor::MoveAnchor);
selection.cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor);
extraSelectionList.append(selection);
}
setExtraSelections(extraSelectionList);
}
}
}
}
示例13: insertSequenceToHeader
static void insertSequenceToHeader(QTextBlock p_block,
QRegExp &p_reg,
QRegExp &p_preReg,
const QString &p_seq)
{
if (!p_block.isValid()) {
return;
}
QString text = p_block.text();
bool matched = p_reg.exactMatch(text);
Q_ASSERT(matched);
matched = p_preReg.exactMatch(text);
Q_ASSERT(matched);
int start = p_reg.cap(1).length() + 1;
int end = p_preReg.cap(1).length();
Q_ASSERT(start <= end);
QTextCursor cursor(p_block);
cursor.setPosition(p_block.position() + start);
if (start != end) {
cursor.setPosition(p_block.position() + end, QTextCursor::KeepAnchor);
}
if (p_seq.isEmpty()) {
cursor.removeSelectedText();
} else {
cursor.insertText(p_seq + ' ');
}
}
示例14: updateFormatting
void CodeHighlighter::updateFormatting(QTextDocument* _document, CodeHighlighterSettings const& _settings)
{
QTextBlock block = _document->firstBlock();
QList<QTextLayout::FormatRange> ranges;
Formats::const_iterator format = m_formats.begin();
while (true)
{
while ((format == m_formats.end() || (block.position() + block.length() <= format->start)) && block.isValid())
{
auto layout = block.layout();
layout->clearAdditionalFormats();
layout->setAdditionalFormats(ranges);
_document->markContentsDirty(block.position(), block.length());
block = block.next();
ranges.clear();
}
if (!block.isValid())
break;
int intersectionStart = std::max(format->start, block.position());
int intersectionLength = std::min(format->start + format->length, block.position() + block.length()) - intersectionStart;
if (intersectionLength > 0)
{
QTextLayout::FormatRange range;
range.format = _settings.formats[format->token];
range.start = format->start - block.position();
range.length = format->length;
ranges.append(range);
}
++format;
}
}
示例15: selectedLines
QString selectedLines(QTextDocument *doc, const QTextBlock &startBlock, const QTextBlock &endBlock)
{
return Utils::Text::textAt(QTextCursor(doc),
startBlock.position(),
std::max(0,
endBlock.position() + endBlock.length()
- startBlock.position() - 1));
}