以下のコードはQTextEditをそのまま自身のキャンバスに描画するクラスの一例です。
自由に切り貼りして、自分にあった形に直してください。
class TextCanvas : public QWidget
{
Q_OBJECT
public:
explicit TextCanvas(QWidget *parent = nullptr)
: QWidget(parent) {}
void setTextEdit(QTextEdit *edit)
{
textEdit = edit;
update();
}
void setDrawRect(const QRectF &rect)
{
drawRect = rect;
update();
}
protected:
void paintEvent(QPaintEvent *) override
{
if (!textEdit) return;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QTextDocument *doc = textEdit->document();
// 横幅を指定
doc->setTextWidth(drawRect.width());
painter.save();
// ① 描画開始位置
painter.translate(drawRect.topLeft());
// ② 縦横制限
painter.setClipRect(QRectF(0, 0, drawRect.width(), drawRect.height()));
// ③ 描画
doc->drawContents(&painter);
painter.restore();
}
private:
QTextEdit *textEdit = nullptr;
QRectF drawRect = QRectF(0, 0, 300, 200); // デフォルト
};