2011-02-08 24 views
7

Làm thế nào để chương trình thanh cuộn để nhảy xuống dưới cùng/đầu trong trường hợp thay đổi trong QPlainTextEdit hoặc QTextEdit khu vực? Có vẻ như nó không có chức năng điều khiển.Làm thế nào để chương trình thanh cuộn để nhảy xuống dưới cùng/đầu trong trường hợp thay đổi trong QPlainTextEdit hoặc QTextEdit khu vực?

+0

Chúng tôi có hai cách giải thích khác nhau! Bạn có muốn thay đổi văn bản hoặc thay đổi hình học không? – TonyK

Trả lời

3

Khi điều chỉnh chỉnh sửa văn bản được đổi kích thước, QWidget::resizeEvent được gọi. Bạn chỉ cần ghi đè hàm này trong lớp con của mình và gọi verticalScrollBar -> setValue (verticalScrollBar -> minimum()) (hoặc maximum()).

+0

Cảm ơn bạn đã trả lời! Tôi muốn phát triển một chương trình khách hàng đầu cuối cho một máy chủ đặc biệt. Có một hộp kiểm mà bạn có thể khóa/mở khóa màn hình. Nếu nó được mở khóa, sau đó xử lý các gói tin được gửi đến QPlainTextBox sẽ tự động buộc thanh cuộn ở phía dưới (bất kể vị trí con trỏ). Giải pháp của bạn có vẻ đầy hứa hẹn. Tôi sẽ cung cấp cho bạn một phản hồi sau ... Cảm ơn! – falconium

7

Bạn có thể sử dụng phương pháp 'ensureCursorVisible':

void QTextEdit::ensureCursorVisible() 
Ensures that the cursor is visible by scrolling the text edit if necessary. 

Đây không phải là một khe cắm, mặc dù, vì vậy bạn không thể kết nối nó với bất kỳ tín hiệu - bạn sẽ phải tạo một cái gì đó chính mình mà bạn có thể kết nối với tín hiệu void textChanged().

Tuyên bố từ chối trách nhiệm: Tôi có thể đã hiểu sai câu hỏi của bạn - Tôi cho rằng bạn muốn cuộn xuống khi một số văn bản được thêm vào văn bản.

+0

điều này nên được chấp nhận là câu trả lời đúng – warunanc

14

QTextEdit và QPlainTextEdit đều được thừa kế từ QAbstractScrollArea. Đối tượng QAbstractScrollArea cung cấp quyền truy cập vào thanh cuộn thông qua phương thức verticalScrollBar().

Vì vậy, để nhảy lên trên cùng:

ui.textEdit->verticalScrollBar()->setValue(0); 

Và để nhảy xuống dưới:

ui.textEdit->verticalScrollBar()->setValue(ui.textEdit->verticalScrollBar()->maximum()); 

này nên làm việc cho cả QTextEdit và QPlainTextEdit.

+0

Tôi đã bỏ lỡ câu trả lời của TonyK đã giải quyết được vấn đề. Câu trả lời của TonyK nên được chấp nhận. – d11

0

Ở đây tôi đang đăng giải pháp của mình như giải pháp dint ở trên trong trường hợp của tôi.

Tôi muốn lấy con trỏ ở đầu số QTextbrowser.

Bằng cách sử dụng QTextEdit::setTextCursor, bạn có thể di chuyển con trỏ có thể nhìn thấy nơi bạn muốn:

 // Go to beginning 
    QTextCursor textCursor = ui->textBrowser->textCursor(); 
    textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor,1); 
    ui->textBrowser->setTextCursor(textCursor); 

Hope, nó sẽ giúp cho một số một và tiết kiệm thời gian quý báu của họ.

0

Tôi đã thực hiện trong Pyqt.

self.scrollArea.verticalScrollBar(). RangeChanged.connect (self.change_scroll)

--------

@pyqtSlot(int, int) 
def change_scroll(self, min, max): 
    print("cambio", min, max) 
    self.scrollArea.verticalScrollBar().setSliderPosition(max) 
Các vấn đề liên quan