2014-09-09 11 views
1

Qt 5.3 및 QPlainTextEdit 기반 위젯을 사용하고 있습니다. 나는 그것에 모든 시간을 추가/삽입 텍스트. 수동으로 내용을 스크롤하면 스크롤을 잠 그어 화면이 동일한 위치에 계속 유지됩니다 (내용이 계속 추가/삽입 됨). 커서를 배치하고 insertText/appendText를 사용하여 구성 요소에 텍스트를 추가/삽입합니다.Qt 5.3 QPlainTextEdit은 스크롤 잠금을 구현합니다

this->cursor.insertText(text, this->format); 

아이디어가 있습니까?

답변

2

이 문제의 해결책은 사용자 호버는 (이벤트 입력) 때 plainTextEdit 사용자 휴가 위젯, 우리는 다시 스크롤 자동을 사용할 때 우리는, 자동 스크롤을 중지합니다

QTextCursor cursor(ui->plainTextEdit->textCursor()); 
cursor.insertText("A"); 
if(global) 
    ui->plainTextEdit->verticalScrollBar()->setValue(ui->plainTextEdit->verticalScrollBar()->maximum()); 

ui->plainTextEdit->insertPlainText("A");//this doesn't have auto scroll 
if(global)//global is bool variable, if it is true, we autoscroll to the bottom 
    ui->plainTextEdit->verticalScrollBar()->setValue(ui->plainTextEdit->verticalScrollBar()->maximum());//we auto scroll it everytime 

또는

이제 우리는 다음에 수행. 나는 eventFilter에 의해 이것을했지만, 나는 당신이 내 생각을 이해하기를 바랍니다.

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
    if(obj==ui->plainTextEdit && (event->type()==QEvent::Enter || event->type()==QEvent::Leave)) 
    { 

     if(event->type()==QEvent::Enter)//user move mouse on widget:stop auto-scrolling 
      global =false; 
     else 
      global =true;// leave event:enable auto-scrolling 
     ui->label->setText(event->type()==QEvent::Enter ? "Hovering" : "Not Hovering");//just show it to user, you can delete this line 
    } 

return QObject::eventFilter(obj, event); 
} 
+0

나는 당신을 이해한다. 그러나 나는> plain-> plainTextEdit-> insertPlainText ("A"); 텍스트를 추가합니다. 대신 커서를 위치시키고 텍스트를 삽입하는 데 사용합니다. 이것은 자동 스크롤입니다. 스크롤을 막을 수있는 방법이 있습니까 ??? resizeEvent를 다시 구현하려고했지만 성공하지 못했습니다. – Yore

+0

@ user3071624'insertPlainText' 대신에'QTextCursor cursor (ui-> plainTextEdit-> textCursor());' 'cursor.insertText ("A");'를 사용하여 메소드를 시험해 봅니다. 이, 나는 대답에 사용하는 코드를 추가한다) 결과는 같았다. – Chernobyl

+0

오! 나는 그것을 지금 본다. 그러나 여전히 텍스트를 추가 할 때 텍스트가 표시된 영역을 확장 할 때 스크롤이 계속 발생합니다. 아마 나는 스크롤을 일으키는 다른 방법을 사용하고있을 것입니다. eventFilter에 대한 코드는 매우 훌륭합니다. 감사. – Yore

0

보십시오. 나는 이것이 당신이 구현하기를 원하는 것이라고 생각합니다.

QScrollBar *bar = plainTextEdit->verticalScrollBar(); 
bar->setValue(bar->maximum());