1 Star 0 Fork 0

程梦杰 / line_number_code_editor

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
oNumberBar.cpp 1.44 KB
一键复制 编辑 原始数据 按行查看 历史
程梦杰 提交于 2022-01-11 18:29 . first commit
#include "oNumberBar.h"
oNumberBar::oNumberBar(QTextEdit* textEdit, QWidget* parent):
QWidget(parent),
_textEdit(textEdit)
{
QWidget::setFont(textEdit->font());
setFixedWidth(fontMetrics().boundingRect(QString("00000")).width());
connect(_textEdit->document()->documentLayout(), SIGNAL(update(const QRectF&)), this, SLOT(update()));
connect(_textEdit->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(update()));
}
oNumberBar::~oNumberBar()
{ }
void oNumberBar::setFont(const QFont& font)
{
QWidget::setFont(font);
setFixedWidth(fontMetrics().boundingRect(QString("00000")).width());
}
void oNumberBar::paintEvent(QPaintEvent*)
{
QAbstractTextDocumentLayout* layout = _textEdit->document()->documentLayout();
int contentsY = _textEdit->verticalScrollBar()->value();
qreal pageBottom = contentsY + _textEdit->viewport()->height();
const QFontMetrics fm = fontMetrics();
const int ascent = fontMetrics().ascent() + 1;
int lineCount = 1;
QPainter painter(this);
for (QTextBlock block = _textEdit->document()->begin(); block.isValid(); block = block.next(), ++lineCount)
{
const QRectF boundingRect = layout->blockBoundingRect(block);
QPointF position = boundingRect.topLeft();
if (position.y() + boundingRect.height() < contentsY) continue;
if (position.y() > pageBottom) break;
const QString txt = QString::number(lineCount);
painter.drawText(width()- 10 - fm.boundingRect(txt).width(), qRound(position.y()), txt);
}
}
1
https://gitee.com/cheng_lib/line_number_code_editor.git
git@gitee.com:cheng_lib/line_number_code_editor.git
cheng_lib
line_number_code_editor
line_number_code_editor
master

搜索帮助