好的,所以我们有专用插槽方法textChanged,它在textEdit对象被修改时通知我们。这个实现是相当健壮的,并通知我们何时用键盘插入文本,复制和粘贴以及其他大部分内容。Qt获取文本
但无论如何,是否有实际的文字被改变?
好的,所以我们有专用插槽方法textChanged,它在textEdit对象被修改时通知我们。这个实现是相当健壮的,并通知我们何时用键盘插入文本,复制和粘贴以及其他大部分内容。Qt获取文本
但无论如何,是否有实际的文字被改变?
正如伊戈尔所说,你可以使用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
尝试在您的电脑,我认为这是正常的效率。
看起来很棒,非常类似于我在文档中找到的内容。你有什么想法,但这种刷新速度有多快? – 2014-09-13 04:12:17
@PaulBae请参阅我的编辑。 – Chernobyl 2014-09-13 04:22:39
感谢您的编辑,我只是在我的系统上尝试过,并取得了类似的结果! – 2014-09-13 04:27:37
'textEdit.toPlainText()',也许?我不确定我是否理解困难的性质。 – 2014-09-13 01:34:58
您可能正在寻找'QTextEdit :: document()'和'QTextDocument'对象。后者发出具有更多关于变化的更详细信息的信号。 – 2014-09-13 01:40:59
我现在正在查看QTextDocument类。感谢您的建议! – 2014-09-13 01:50:57