2012-07-27 41 views
8

Tôi có một mẫu có số QTextEdit trên đó, được gọi là translationInput. Tôi đang cố gắng cung cấp chức năng chỉnh sửa cho người dùng.Di chuyển con trỏ bên trong QTextEdit

Điều này QTextEdit sẽ chứa văn bản được định dạng HTML. Tôi có một bộ nút, như "bold", "Nghiêng", v.v., nên thêm các thẻ tương ứng vào tài liệu. Nếu nút được nhấn khi không có văn bản nào được chọn, tôi chỉ muốn chèn một cặp thẻ, ví dụ: <b></b>. Nếu một số văn bản được chọn, tôi muốn các thẻ xuất hiện bên trái và bên phải từ đó.

Tính năng này hoạt động tốt. Tuy nhiên, tôi cũng muốn con trỏ được đặt trước thẻ đóng sau đó, do đó người dùng sẽ có thể tiếp tục nhập bên trong thẻ mới được thêm mà không cần định vị lại con trỏ theo cách thủ công. Theo mặc định, con trỏ xuất hiện bên phải sau văn bản mới được thêm vào (vì vậy trong trường hợp của tôi, ngay sau thẻ đóng).

Dưới đây là đoạn code mà tôi có cho nút Nghiêng:

//getting the selected text(if any), and adding tags. 
QString newText = ui.translationInput->textCursor().selectedText().prepend("<i>").append("</i>"); 
//Inserting the new-formed text into the edit 
ui.translationInput->insertPlainText(newText); 
//Returning focus to the edit 
ui.translationInput->setFocus(); 
//!!! Here I want to move the cursor 4 characters left to place it before the </i> tag. 
ui.translationInput->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4); 

Tuy nhiên, dòng cuối cùng không làm gì cả, con trỏ không di chuyển, mặc dù lợi nhuận movePosition()true, mà có nghĩa là tất cả các hoạt động đã được hoàn tất thành công.

Tôi cũng đã thử làm điều này với QTextCursor::PreviousCharacter thay vì QTextCursor::Left và đã thử di chuyển nó trước và sau khi trả tiêu điểm cho bản chỉnh sửa, điều đó sẽ không thay đổi gì.

Câu hỏi đặt ra là, làm cách nào để di chuyển con trỏ bên trong QTextEdit?

Trả lời

9

Giải quyết vấn đề bằng cách tìm hiểu sâu hơn về tài liệu.

Hàm textCursor() trả về sao chép của con trỏ từ QTextEdit. Vì vậy, để thay đổi một thực tế, setTextCursor() chức năng phải được sử dụng:

QTextCursor tmpCursor = ui.translationInput->textCursor(); 
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4); 
ui.translationInput->setTextCursor(tmpCursor); 
+10

Bạn có thể trực tiếp di chuyển con trỏ văn bản bằng cách sử dụng 'moveCursor()': 'ui.translationInput-> moveCursor (QTextCursor :: Left, QTextCursor :: MoveAnchor, 4); ' – iliis

+0

Tôi nghĩ rằng các bình luận trên nên được chuyển thành một câu trả lời. –

Các vấn đề liên quan