2014-09-13 6 views
0

좋아요, 그래서 우리는 텍스트 편집기 개체가 수정되었을 때 알려주는 전용 슬롯 메서드 textChanged을 가지고 있습니다. 이 구현은 다소 견고하며 키보드로 텍스트를 삽입 할 때 복사하여 붙여 넣기 등을 할 때 알려줍니다.Qt 텍스트 가져 오기

그러나 변경된 실제 텍스트를 가져 오는 방법이 있습니까?

+0

'textEdit.toPlainText()'? 난 그 어려움의 본질을 잘 모르겠다. –

+0

당신은'QTextEdit :: document()'와'QTextDocument' 객체를 찾고있을 것입니다. 후자는 변경 사항에 대한보다 자세한 정보가 포함 된 신호를 내 보냅니다. –

+0

지금 QTextDocument 클래스를 살펴 보겠습니다. 제안 해 주셔서 감사합니다! –

답변

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); 

을 그리고 지금 당신이 얻을 수있는 텍스트를 in 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

은 멋지게 보입니다. 문서에서 찾은 것과 아주 흡사합니다. 이 새로 고침이 얼마나 빠릅니다. –

+0

@PaulBae 제 편집을 참조하십시오. – Chernobyl

+0

편집 해 주셔서 감사합니다. 저는 방금 시스템에서 시험해보고 비슷한 결과를 얻었습니다! –