本文整理汇总了C++中QTextLine::isValid方法的典型用法代码示例。如果您正苦于以下问题:C++ QTextLine::isValid方法的具体用法?C++ QTextLine::isValid怎么用?C++ QTextLine::isValid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QTextLine
的用法示例。
在下文中一共展示了QTextLine::isValid方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setName
void FileMetaDataToolTip::setName(const QString& name)
{
QTextOption textOption;
textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
const QString processedName = Qt::mightBeRichText(name) ? name : KStringHandler::preProcessWrap(name);
QTextLayout textLayout(processedName);
textLayout.setFont(m_name->font());
textLayout.setTextOption(textOption);
QString wrappedText;
wrappedText.reserve(processedName.length());
// wrap the text to fit into the maximum width of m_name
textLayout.beginLayout();
QTextLine line = textLayout.createLine();
while (line.isValid()) {
line.setLineWidth(m_name->maximumWidth());
wrappedText += processedName.midRef(line.textStart(), line.textLength());
line = textLayout.createLine();
if (line.isValid()) {
wrappedText += QChar::LineSeparator;
}
}
textLayout.endLayout();
m_name->setText(wrappedText);
}
示例2: layoutText
void YTDelegate::layoutText(QTextLayout& textLayout, QString text, QSize constraint) const
{
QTextOption textOption(Qt::AlignJustify);
textLayout.setTextOption(textOption);
textLayout.setText(text);
textLayout.beginLayout();
int lHeight = 0;
while(true){
QTextLine line = textLayout.createLine();
if(!line.isValid())
break;
line.setLineWidth(constraint.width());
line.setPosition(QPointF(0, lHeight));
if(lHeight + line.height() > constraint.height())
{
QTextLine lastLine = textLayout.lineAt(textLayout.lineCount() - 2);
QString lastString = text.mid(lastLine.textStart());
QFontMetrics fm(textLayout.font());
text.chop(lastString.length());
text += fm.elidedText(lastString, Qt::ElideRight, constraint.width()-1);
textLayout.endLayout();
layoutText(textLayout, text, constraint);
return;
}
lHeight += line.height();
lHeight += line.leading();
}
textLayout.endLayout();
}
示例3: recalculateTextLayout
void TestResultDelegate::recalculateTextLayout(const QModelIndex &index, const QString &output,
const QFont &font, int width) const
{
if (m_lastProcessedIndex == index && m_lastProcessedFont == font)
return;
const QFontMetrics fm(font);
const int leading = fm.leading();
const int fontHeight = fm.height();
m_lastProcessedIndex = index;
m_lastProcessedFont = font;
m_lastCalculatedHeight = 0;
m_lastCalculatedLayout.clearLayout();
m_lastCalculatedLayout.setText(output);
m_lastCalculatedLayout.setFont(font);
QTextOption txtOption;
txtOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
m_lastCalculatedLayout.setTextOption(txtOption);
m_lastCalculatedLayout.beginLayout();
while (true) {
QTextLine line = m_lastCalculatedLayout.createLine();
if (!line.isValid())
break;
line.setLineWidth(width);
m_lastCalculatedHeight += leading;
line.setPosition(QPoint(0, m_lastCalculatedHeight));
m_lastCalculatedHeight += fontHeight;
}
m_lastCalculatedLayout.endLayout();
}
示例4: noRunAroundFrame
void TestDocumentLayout::noRunAroundFrame()
{
// With this test we want to make sure a shape that is set to not run around
// will simply put the text further down.
initForNewTest(loremIpsum);
MockShape *picture = new MockShape();
KWFrame frame(picture, frameSet);
frame.setTextRunAround(KWord::NoRunAround);
picture->setSize(QSizeF(100, 100));
picture->setPosition(QPointF(0, 0));
MockLayoutState *state = new MockLayoutState(doc);
layout->setLayout(state);
state->shape = shape1;
layout->layout();
QTextLayout *lay = doc->begin().layout();
QVERIFY(lay->lineCount() >= 4);
QTextLine line = doc->begin().layout()->lineAt(0);
QVERIFY(line.isValid());
double preY = line.position().y();
int linenumber=1;
line = doc->begin().layout()->lineAt(linenumber);
while(linenumber < lay->lineCount()) {
qDebug() << line.position().y() << (preY + 14.4);
QVERIFY(line.position().y() > (preY + 14.4 - ROUNDING));
preY = line.position().y();
++linenumber;
line = doc->begin().layout()->lineAt(linenumber);
}
}
示例5: textFontMetrics
//virtual
void PixButton::redoLabelTextLayout()
{
//TODO: somewhat wasteful. If there is no label, should just exit early and leave a layout that will be left unrendered by paint()
m_textLayoutObject.clearLayout();
m_textLayoutObject.setText(m_label);
m_textLayoutObject.setFont(m_textFont);
QTextOption textOpts;
textOpts.setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
textOpts.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
m_textLayoutObject.setTextOption(textOpts);
QFontMetrics textFontMetrics(m_textFont);
int leading = textFontMetrics.leading();
int rise = textFontMetrics.ascent();
qreal height = 0;
m_textLayoutObject.beginLayout();
while (height < m_labelMaxGeom.height()) {
QTextLine line = m_textLayoutObject.createLine();
if (!line.isValid())
break;
line.setLineWidth(m_labelMaxGeom.width());
if (m_textLayoutObject.lineCount() > 1)
{
height += leading;
}
line.setPosition(QPointF(0, height));
height += line.height();
}
height = qMin((quint32)DimensionsGlobal::roundUp(height),(quint32)m_labelMaxGeom.height());
height = DimensionsGlobal::roundDown(height) - (DimensionsGlobal::roundDown(height) % 2); //force to an even #
m_textLayoutObject.endLayout();
//TODO: PIXEL-ALIGN
m_labelGeom = DimensionsGlobal::realRectAroundRealPoint(QSizeF(m_textLayoutObject.boundingRect().width(),height)).toAlignedRect();
}
示例6: drawDisplay
void PluginListDelegate::drawDisplay(QPainter* painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const
{
QTextDocument textDocument;
textDocument.setHtml(text);
QTextLayout textLayout(textDocument.begin());
textLayout.setFont(option.font);
const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0) + 1;
QRect textRect = rect.adjusted(textMargin, 0, -textMargin, 0); // remove width padding
textLayout.beginLayout();
qreal height = 0;
while (1) {
QTextLine line = textLayout.createLine();
if (!line.isValid()) {
break;
}
line.setLineWidth(textRect.width());
height += 3;
line.setPosition(QPoint(0, height));
height += line.height();
}
textLayout.endLayout();
textLayout.draw(painter, QPointF(textRect.left(), textRect.top()));
}
示例7: drawText
void KCRowHeader::drawText(QPainter& painter, const QFont& font,
const QPointF& location, const QString& text) const
{
register KCSheet * const sheet = m_pView->activeSheet();
if (!sheet)
return;
const double scaleX = POINT_TO_INCH(double(KoDpi::dpiX()));
const double scaleY = POINT_TO_INCH(double(KoDpi::dpiY()));
// Qt scales the font already with the logical resolution. Do not do it twice!
painter.save();
painter.scale(1.0 / scaleX, 1.0 / scaleY);
QTextLayout textLayout(text, font);
textLayout.beginLayout();
forever {
QTextLine line = textLayout.createLine();
if (!line.isValid())
break;
line.setLineWidth(width() * scaleX);
}
textLayout.endLayout();
QPointF loc(location.x() * scaleX, location.y() * scaleY);
textLayout.draw(&painter, loc);
painter.restore();
}
示例8: drawText
void RowHeader::drawText(QPainter* painter, const QFont& font,
qreal ypos, qreal width, const QString& text) const
{
register Sheet * const sheet = m_pCanvas->activeSheet();
if (!sheet)
return;
const double scaleX = POINT_TO_INCH(double(KoDpi::dpiX()));
const double scaleY = POINT_TO_INCH(double(KoDpi::dpiY()));
// Qt scales the font already with the logical resolution. Do not do it twice!
painter->save();
painter->scale(1.0 / scaleX, 1.0 / scaleY);
QTextLayout textLayout(text, font);
textLayout.beginLayout();
textLayout.setTextOption(QTextOption(Qt::AlignHCenter));
forever {
QTextLine line = textLayout.createLine();
if (!line.isValid())
break;
line.setLineWidth(width * scaleX);
}
textLayout.endLayout();
QPointF loc(0, ypos * scaleY);
textLayout.draw(painter, loc);
painter->restore();
}
示例9: descriptionHeight
int JobItem::descriptionHeight(const QStyleOptionViewItem & option)
{
int textTotalWidth = 0;
int lineWidth = option.rect.width() - 2 * m_itemPadding;
QString description = m_job->description().simplified();
QTextLayout descriptionLayout(description, m_descriptionFont, m_paintDevice);
descriptionLayout.beginLayout();
for (int i = 0; i < m_descriptionLineCount - 1; ++i)
{
QTextLine line = descriptionLayout.createLine();
if (!line.isValid())
{
// There is no text left to be inserted into the layout.
break;
}
line.setLineWidth(lineWidth);
textTotalWidth += line.naturalTextWidth();
}
descriptionLayout.endLayout();
// Add space for last visible line.
textTotalWidth += lineWidth;
m_descriptionText = m_descriptionFontMetrics.elidedText(description,
Qt::ElideRight,
textTotalWidth);
m_descriptionRect =
m_descriptionFontMetrics.boundingRect(0,
0,
option.rect.width() - 2 * m_itemPadding,
0,
descriptionFlags(),
m_descriptionText);
return m_descriptionRect.height();
}
示例10: paint_QTextLayout
void paint_QTextLayout(QPainter &p, bool useCache)
{
static bool first = true;
static QTextLayout *textLayout[lines];
if (first) {
for (int i = 0; i < lines; ++i) {
textLayout[i] = new QTextLayout(strings[i]);
int leading = p.fontMetrics().leading();
qreal height = 0;
qreal widthUsed = 0;
textLayout[i]->setCacheEnabled(useCache);
textLayout[i]->beginLayout();
while (1) {
QTextLine line = textLayout[i]->createLine();
if (!line.isValid())
break;
line.setLineWidth(lineWidth);
height += leading;
line.setPosition(QPointF(0, height));
height += line.height();
widthUsed = qMax(widthUsed, line.naturalTextWidth());
}
textLayout[i]->endLayout();
}
first = false;
}
for (int i = 0; i < count; ++i) {
for (int j = 0; j < lines; ++j) {
textLayout[j]->draw(&p, QPoint(0, j*spacing));
}
}
}
示例11: testRightToLeftList
void TestDocumentLayout::testRightToLeftList()
{
initForNewTest("a\nb\nc");
KoParagraphStyle h1;
h1.setTextProgressionDirection(KoText::RightLeftTopBottom);
m_styleManager->add(&h1);
KoListStyle listStyle;
KoListLevelProperties llp = listStyle.levelProperties(1);
llp.setStyle(KoListStyle::DecimalItem);
listStyle.setLevelProperties(llp);
h1.setListStyle(&listStyle);
QTextBlock block = m_doc->begin();
h1.applyStyle(block);
block = block.next();
h1.applyStyle(block);
block = block.next();
h1.applyStyle(block);
block = block.next();
m_layout->layout();
block = m_doc->begin();
while (block.isValid()) {
KoTextBlockData *data = dynamic_cast<KoTextBlockData *>(block.userData());
QVERIFY(data);
QVERIFY(data->counterWidth() > 2);
QVERIFY(data->counterPosition().x() > 100);
QTextLine line = block.layout()->lineAt(0);
QVERIFY(line.isValid());
QCOMPARE(line.x(), (qreal)0);
QCOMPARE(line.width() + data->counterWidth() + data->counterSpacing(), (qreal)200);
block = block.next();
}
}
示例12: atEnd
///Indique si on est à la dernière ligne
bool RzxTextEdit::atEnd() const
{
QTextBlock block = textCursor().block();
if(block.next().isValid()) return false;
QTextLine line = currentTextLine();
return line.isValid() && line.lineNumber() == block.layout()->lineCount() - 1;
}
示例13: atBeginning
///Indique si on est à la première ligne
bool RzxTextEdit::atBeginning() const
{
QTextBlock block = textCursor().block();
if(block.previous().isValid()) return false;
QTextLine line = currentTextLine();
return line.isValid() && !line.lineNumber();
}
示例14: paintEvent
//! [2]
void ElidedLabel::paintEvent(QPaintEvent *event)
{
QFrame::paintEvent(event);
QPainter painter(this);
QFontMetrics fontMetrics = painter.fontMetrics();
bool didElide = false;
int lineSpacing = fontMetrics.lineSpacing();
int y = 0;
QTextLayout textLayout(content, painter.font());
textLayout.beginLayout();
forever {
QTextLine line = textLayout.createLine();
if (!line.isValid())
break;
line.setLineWidth(width());
int nextLineY = y + lineSpacing;
if (height() >= nextLineY + lineSpacing) {
line.draw(&painter, QPoint(0, y));
y = nextLineY;
//! [2]
//! [3]
} else {
QString lastLine = content.mid(line.textStart());
QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width());
painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine);
line = textLayout.createLine();
didElide = line.isValid();
break;
}
}
textLayout.endLayout();
//! [3]
//! [4]
if (didElide != elided) {
elided = didElide;
emit elisionChanged(didElide);
}
}
示例15: placeAnchoredFrame
void TestDocumentLayout::placeAnchoredFrame()
{
initForNewTest(QString());
MockShape *picture = new MockShape();
picture->setSize(QSizeF(100, 100));
KTextAnchor *anchor = new KTextAnchor(picture);
anchor->setOffset(QPointF(23, 45));
QTextCursor cursor(doc);
KInlineTextObjectManager *manager = new KInlineTextObjectManager();
layout->setInlineTextObjectManager(manager);
MockLayoutState *state = new MockLayoutState(doc);
layout->setLayout(state);
state->shape = shape1;
QCOMPARE(doc->begin().text().length(), 0);
manager->insertInlineObject(cursor, anchor);
QCOMPARE(doc->begin().text().length(), 1);
QCOMPARE(cursor.position(), 1);
shape1->setPosition(QPointF(300, 300));
layout->layout();
QCOMPARE(picture->parent(), shape1);
QCOMPARE(picture->position(), QPointF(23, 59.4));
cursor.setPosition(0);
cursor.insertText("foo"); // moves my anchors slightly to the right/down and gives line height
layout->layout();
QCOMPARE(picture->parent(), shape1);
QPointF newPos = picture->position();
QVERIFY(newPos.x() > 23);
QVERIFY(newPos.y() > 45); // it adds the baseline now
cursor.movePosition(QTextCursor::End);
cursor.insertText("\nNew Line\nAnd another");
layout->layout();
QCOMPARE(picture->position(), newPos);
QTextLayout *firstLineLayout = doc->begin().layout();
QTextOption option = firstLineLayout->textOption();
option.setAlignment(Qt::AlignHCenter);
firstLineLayout->setTextOption(option);
layout->layout();
QTextLine first = doc->begin().layout()->lineAt(0);
QVERIFY(first.isValid());
QVERIFY(first.naturalTextRect().x() > 10);
newPos.setX(newPos.x() + first.naturalTextRect().x()); // text is moved due to alignment
QCOMPARE(picture->position(), newPos);
anchor->setOffset(QPointF());
anchor->setAlignment(KTextAnchor::Left);
anchor->setAlignment(KTextAnchor::TopOfParagraph);
layout->layout();
// image is 100 wide, now centered in a parent of 200 so X = 50
QCOMPARE(picture->position(), QPointF(50, 0));
}