如何让QTextBrowser显示QTextEdit的内容?

时间:2014-03-31 20:39:48

标签: qt qtextedit qtextbrowser

我正在尝试将QTextEdit连接到QTextBrowser,因此文本浏览器窗口小部件会输出在文本编辑窗口小部件中输入的内容。作为我使用textChanged()的信号,我使用setText(QString)作为插槽。而且这两个参数不一样。

如果我使用QLineEdit而不是QTextEdit,那么有textChanged(QString)函数与插槽兼容,但我需要使它与QTextEdit一起使用。这是代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtWidgets>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QWidget * mainWidget=new QWidget(this);
    ui->setupUi(this);
    QTextEdit * mainTextEdit=new QTextEdit();
    QTextBrowser * textDisplay=new QTextBrowser();

    connect(mainTextEdit,SIGNAL( textChanged() ),
            textDisplay,SLOT( setText(QString) ) );

    QHBoxLayout * Alayout=new QHBoxLayout();
    Alayout->addWidget(mainTextEdit);
    Alayout->addWidget(textDisplay);
    mainWidget->setLayout(Alayout);
    setCentralWidget(mainWidget);
}

MainWindow::~MainWindow()
{
    delete ui;
}

2 个答案:

答案 0 :(得分:1)

我会按以下方式进行:

将指向文本编辑和文本浏览器小部件的指针声明为类中的成员变量

在MainWindow类中创建一个插槽onTextChanged(),一旦文本编辑更改,将立即调用该插槽,并将连接设置为:

connect(mainTextEdit, SIGNAL(textChanged()), this, SLOT(onTextChanged()));

以下列方式实现onTextChanged()插槽:

MainWindow::onTextChanged()
{
    QString text = mainTextEdit->toPlainText();
    textDisplay->setPlainText(text); 
}

答案 1 :(得分:1)

值得庆幸的是,QTextEditQTextBrowser是对QTextDocument模型的观看。因此,您只需在浏览器上设置编辑器的文档即可。 QTextBrowser::setDocument在语义上等同于QAbstractItemView::setModel

textDisplay->setDocument(mainTextEdit->document());

在Qt中,实际上有两个基本的模型类:QAbstractItemModelQTextDocumentQTextDocument是其自己的模型 - 视图框架中的模型。我们只是在编辑器操作的文档上设置另一个视图。编辑器允许修改模型,浏览器不允许。它与在两个QListViews等上使用相同的模型没什么不同。

QTextEditor是具有默认模型(文档)的视图。您可以将该默认模型替换为另一个视图中的一个,或者甚至是您自己提供的模型。您可以让多个编辑器全部显示相同的QTextDocument文档并允许并行编辑它。您也可以让多个浏览器做同样的事情。

完整示例:

#include <QApplication>
#include <QTextEdit>
#include <QTextBrowser>
#include <QHBoxLayout>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget window;
   QHBoxLayout layout(&window);
   QTextEdit edit;
   QTextBrowser browser;
   layout.addWidget(&edit);
   layout.addWidget(&browser);
   browser.setDocument(edit.document());
   window.show();
   return a.exec();
}