本文整理汇总了C++中QTextDocumentPrivate::move方法的典型用法代码示例。如果您正苦于以下问题:C++ QTextDocumentPrivate::move方法的具体用法?C++ QTextDocumentPrivate::move怎么用?C++ QTextDocumentPrivate::move使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QTextDocumentPrivate
的用法示例。
在下文中一共展示了QTextDocumentPrivate::move方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mergeCells
//.........这里部分代码省略.........
QFragmentFindHelper helper(origCellPosition, p->fragmentMap());
QList<int>::Iterator it = qBinaryFind(d->cells.begin(), d->cells.end(), helper);
Q_ASSERT(it != d->cells.end());
Q_ASSERT(*it == cellFragment);
const int insertCellIndex = it - d->cells.begin();
int insertFragment = d->cells.value(insertCellIndex + 1, d->fragment_end);
uint insertPos = p->fragmentMap().position(insertFragment);
d->blockFragmentUpdates = true;
bool rowHasText = cell.firstCursorPosition().block().length();
bool needsParagraph = rowHasText && colSpan == numCols;
// find all cells that will be erased by the merge
for (int r = row; r < row + numRows; ++r) {
int firstColumn = r < row + rowSpan ? column + colSpan : column;
// don't recompute the cell index for the first row
int firstCellIndex = r == row ? insertCellIndex + 1 : -1;
int cellIndex = firstCellIndex;
for (int c = firstColumn; c < column + numCols; ++c) {
const int fragment = d->grid[r * d->nCols + c];
// already handled?
if (fragment == cellFragment)
continue;
QTextDocumentPrivate::FragmentIterator it(&p->fragmentMap(), fragment);
uint pos = it.position();
if (firstCellIndex == -1) {
QFragmentFindHelper helper(pos, p->fragmentMap());
QList<int>::Iterator it = qBinaryFind(d->cells.begin(), d->cells.end(), helper);
Q_ASSERT(it != d->cells.end());
Q_ASSERT(*it == fragment);
firstCellIndex = cellIndex = it - d->cells.begin();
}
++cellIndex;
QTextCharFormat fmt = fc->charFormat(it->format);
const int cellRowSpan = fmt.tableCellRowSpan();
const int cellColSpan = fmt.tableCellColumnSpan();
// update the grid for this cell
for (int i = r; i < r + cellRowSpan; ++i)
for (int j = c; j < c + cellColSpan; ++j)
d->grid[i * d->nCols + j] = cellFragment;
// erase the cell marker
p->remove(pos, 1);
const int nextFragment = d->cells.value(cellIndex, d->fragment_end);
const uint nextPos = p->fragmentMap().position(nextFragment);
Q_ASSERT(nextPos >= pos);
// merge the contents of the cell (if not empty)
if (nextPos > pos) {
if (needsParagraph) {
needsParagraph = false;
QTextCursor(p, insertPos++).insertBlock();
p->move(pos + 1, insertPos, nextPos - pos);
} else if (rowHasText) {
QTextCursor(p, insertPos++).insertText(QLatin1String(" "));
p->move(pos + 1, insertPos, nextPos - pos);
} else {
p->move(pos, insertPos, nextPos - pos);
}
insertPos += nextPos - pos;
rowHasText = true;
}
}
if (rowHasText) {
needsParagraph = true;
rowHasText = false;
}
// erase cells from last row
if (firstCellIndex >= 0) {
d->cellIndices.remove(firstCellIndex, cellIndex - firstCellIndex);
d->cells.erase(d->cells.begin() + firstCellIndex, d->cells.begin() + cellIndex);
}
}
d->fragment_start = d->cells.first();
fmt.setTableCellRowSpan(numRows);
fmt.setTableCellColumnSpan(numCols);
p->setCharFormat(origCellPosition, 1, fmt);
d->blockFragmentUpdates = false;
d->dirty = false;
p->endEditBlock();
}