我需要构建一个基于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
是一个对象。我该如何构建我的小部件?
答案 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
作为窗口小部件,则必须使用QTextEdit
或QPlainTextEdit
。
还有QGraphicsTextItem
。
QTextDocument
主要是可读性类,相反,这三个类是可写性类。
QTextDocument
最初附属于这些类。
您可以通过调用document()
方法来获取它。
通常,作者使用QTextDocument
通过这些小部件在阅读具有块结构信息的情况下编辑文档。
您添加QTextEdit
,QPlainTextEdit
,QGraphicsTextItem
而不是QTextDocument
。
QTextDocument
自然遵循。
乍一看,您没有使用QGraphicsView框架,因此不会使用QGraphicsTextItem
。
但这取决于您的代码。
其他,QLineEdit
用于单个纯文本。