好的,所以我們有專用插槽方法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