如何使QTextDocument作为小部件?

时间:2019-12-19 12:39:19

标签: qt qwidget qtextdocument qframe qvboxlayout

我需要构建一个基于QTextDocument的小部件。

MyWidget.h

class MyWidget: public QFrame
{
public:
   explicit MyWidget( QWidget *p_parent );

private:
   QTextDocument m_textDocument;
};

MyWidget.cpp

MyWidget::MyWidget( QWidget *p_parent ) : QFrame( p_parent )
{
  QVBoxLayout *layout = new QVBoxLayout( this );
  layout->setMargin( 0 );
  layout->setSpacing( 0 );

  m_textDocument = new QTextDocument( this );
  layout->addWidget( m_textDocument );   // does not work
  layout->addLayout(m_textDocument->documentLayout());  // I have tried this, but incompatible
}

我不能addWidget,因为QTextDocument是一个对象。我该如何构建我的小部件?

2 个答案:

答案 0 :(得分:2)

您不要将QTextDocument用作窗口小部件,因为文档是存储文档内容的idea,因此它没有Graphicsl表示形式。

如果要查找文档的可视表示形式,则可以按以下方式使用QTextEdit:

auto *textEdit = new QTextEdit(parent);
textEdit->setDocument(myTextDocument);
layout->addWidget(textEdit);

答案 1 :(得分:1)

更新

您必须使用***.setDocumentLayout()而不是addLayout

setDocumentLayout()QTextDocument的一种方法。

如果要交换默认的QTextDocument,请重置setDocument()

QTextDocument的子类通常用于createObject()重载。


QTextDocument不是一种小部件。 如果要QTextDocument作为窗口小部件,则必须使用QTextEditQPlainTextEdit。 还有QGraphicsTextItem

QTextDocument主要是可读性类,相反,这三个类是可写性类。

QTextDocument最初附属于这些类。 您可以通过调用document()方法来获取它。

通常,作者使用QTextDocument通过这些小部件在阅读具有块结构信息的情况下编辑文档。

您添加QTextEditQPlainTextEditQGraphicsTextItem而不是QTextDocumentQTextDocument自然遵循。 乍一看,您没有使用QGraphicsView框架,因此不会使用QGraphicsTextItem。 但这取决于您的代码。

其他,QLineEdit用于单个纯文本。