2

我正在尝试连接QTextEditQTextBrowser,因此文本浏览器小部件输出在文本编辑小部件中输入的内容。作为我使用的信号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;
}
4

2 回答 2

1

值得庆幸的是,QTextEditQTextBrowser是对模型的看法QTextDocument。因此,您可以简单地在浏览器上设置编辑器的文档。QTextBrowser::setDocument在语义上等价于QAbstractItemView::setModel

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

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

AQTextEditor是具有默认模型(文档)的视图。您可以将默认模型替换为来自另一个视图的模型,甚至可以替换为您自己提供的模型。您可以让多个编辑器同时显示同一个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();
}
于 2014-03-31T21:01:30.393 回答
1

我会通过以下方式做到这一点:

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

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

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

通过以下方式实现 onTextChanged() 槽:

MainWindow::onTextChanged()
{
    QString text = mainTextEdit->toPlainText();
    textDisplay->setPlainText(text); 
}
于 2014-03-31T20:50:46.780 回答