2014-09-13 94 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