ich bin gerade dabei mittels einer QAbstractTextDocument subclass ein Layout für ein zweispaltiges Dokument zu erstellen.
Das erstellen des Rahmens und der mittleren Trennlinie funktioniert soweit,
nur wird der TextCursor leider nicht mehr angezeigt und auch
Text mittels
Code: Alles auswählen
QTextCursor::insertText()
Hier mal meine subclass:
Code: Alles auswählen
MyTextDocumentLayout::MyTextDocumentLayout(QPrinter *printer, QTextDocument *document) :
QAbstractTextDocumentLayout(document),
m_printer(printer)
{
qDebug() << "MyTextDocumentLayout ctor";
}
QRectF MyTextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
{
qDebug() << "MyTextDocumentLayout::blockBoundingRect";
qDebug() << "blockCount(): " << document()->blockCount();
qDebug() << "lineCount(): " << block.lineCount();
qDebug() << "length(): " << block.length();
qDebug() << "text(): " << block.text();
QTextCharFormat charFormat = block.charFormat();
QFontMetrics fm = charFormat.font();
qDebug() << "fm.height()" << fm.height();
qDebug() << "block.length()" << block.length();
return QRectF(0, 0, block.length(), fm.height());
}
void MyTextDocumentLayout::draw(QPainter *painter, const PaintContext &context)
{
qDebug() << "context.CursorPosition " << context.cursorPosition;
qDebug() << "context.clip " << context.clip;
QRect paperRect = m_printer->paperRect();
//Rand hinzufügen
int leftMargin = 10;
int topMargin = 10;
paperRect.setX(paperRect.x() + leftMargin);
paperRect.setY(paperRect.y() + topMargin);
QPen pen;
pen.setWidth(2);
painter->setPen(pen);
painter->drawRect(paperRect);
pen.setWidth(3);
painter->setPen(pen);
painter->drawLine(paperRect.width() / 2 + leftMargin,
topMargin,
paperRect.width() / 2 + leftMargin,
paperRect.height());
}
int MyTextDocumentLayout::hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const
{
qDebug() << "MyTextDocumentLayout::hitTest()";
qDebug() << "point: " << point;
qDebug() << "Qt::HitTestAccuracy: " << accuracy;
return accuracy;
}
int MyTextDocumentLayout::pageCount() const
{
qDebug() << "MyTextDocumentLayout::pageCount()";
return 1;
}
QSizeF MyTextDocumentLayout::documentSize() const
{
qDebug() << "MyTextDocumentLayout::documentSize()";
return m_printer->paperSize(QPrinter::DevicePixel);
}
QRectF MyTextDocumentLayout::frameBoundingRect(QTextFrame *frame) const
{
qDebug() << "MyTextDocumentLayout::frameBoundRect()";
return QRectF(0.0, 0.0, 10.0, 10.0);
}
void MyTextDocumentLayout::documentChanged(int from, int charsRemoved, int charsAdded)
{
qDebug() << "MyTextDocumentLayout::documentChanged()";
qDebug() << "from: " << from;
qDebug() << "charsRemoved: " << charsRemoved;
qDebug() << "charsAdded: " << charsAdded;
}
Muss ich den in der draw() Funktion zeichnen?
Vielen Dank!
Grüße,
Mike