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
?
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
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. –