2014-09-13 54 views
0

好的,所以我们有专用插槽方法textChanged,它在textEdit对象被修改时通知我们。这个实现是相当健壮的,并通知我们何时用键盘插入文本,复制和粘贴以及其他大部分内容。Qt获取文本

但无论如何,是否有实际的文字被改变?

+0

'textEdit.toPlainText()',也许?我不确定我是否理解困难的性质。 – 2014-09-13 01:34:58

+0

您可能正在寻找'QTextEdit :: document()'和'QTextDocument'对象。后者发出具有更多关于变化的更详细信息的信号。 – 2014-09-13 01:40:59

+0

我现在正在查看QTextDocument类。感谢您的建议! – 2014-09-13 01:50:57

回答

2

正如伊戈尔所说,你可以使用QTextDocument。使用此代码示例:

待办事项连接:

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 

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

+0

看起来很棒,非常类似于我在文档中找到的内容。你有什么想法,但这种刷新速度有多快? – 2014-09-13 04:12:17

+0

@PaulBae请参阅我的编辑。 – Chernobyl 2014-09-13 04:22:39

+0

感谢您的编辑,我只是​​在我的系统上尝试过,并取得了类似的结果! – 2014-09-13 04:27:37