Qt更改文本

Qt get text changed

本文关键字:文本 Qt      更新时间:2023-10-16

好吧,我们有一个私有的slot方法textChanged,当textEdit对象被修改时,它会通知我们。这个实现相当健壮,当使用键盘、复制和粘贴以及其他大多数操作插入文本时,它会通知我们。

然而,是否有任何方法可以获得更改后的实际文本?

正如Igor所说,您可以使用QTextDocument。使用此代码示例:

Do连接:

connect( ui->textEdit->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(change(int,int,int)));

创建插槽:

void MainWindow::change(int pos, int del, int add)
{
    QString added = ui->textEdit->toPlainText().mid(pos,add);
    qDebug() << added;
}

标题中:

  void change(int, int, int);

现在您可以获得粘贴或键入在QTextEdit 中的文本

关于绩效。让我们试验一下。写入此插槽。

void MainWindow::clicked(int pos, int del, int add)
{
    QElapsedTimer tmr;
    tmr.start();
    QString added = ui->textEdit->toPlainText().mid(pos,add);
    qDebug() << added;
    qDebug() << "operation tooks" << tmr.elapsed() <<" ms";
}

别忘了#include <QElapsedTimer>

输入时输出:

operation tooks 0  ms 
"f" 
operation tooks 0  ms 
"d" 
operation tooks 0  ms 
"g" 
operation tooks 0  ms 
"r" 
operation tooks 0  ms 
"d" 
operation tooks 0  ms 
"s" 
operation tooks 0  ms 
"f" 
operation tooks 0  ms 

粘贴包含空格的7817个字符的文本时输出:

...long text...
operation tooks 0  ms 

在你的电脑上试试,我认为这是正常的效率。