2012-07-27 21 views
8

Üzerinde QTextEdit bulunan bir form var, buna translationInput adı verilir. Kullanıcı için düzenleme işlevini sağlamaya çalışıyorum.İmleci QTextEdit'in içinde taşıma

Bu QTextEdit, HTML ile biçimlendirilmiş metin içerecektir. "bold", "Italic" gibi bir dizi düğme var ve bu, ilgili etiketleri belgeye eklemelidir. Hiçbir metin seçilmediğinde düğmesine basılırsa, sadece bir çift etiket eklemek istiyorum, örneğin <b></b>. Bazı metinler seçildiğinde, etiketlerin soldan ve sağdan görünmesini istiyorum.

Bu iyi çalışıyor. Ancak, imlecin kapanış etiketinden önce yerleştirilmesini de istiyorum, böylece kullanıcı, imleci yeniden konumlandırmaya gerek kalmadan yeni eklenen etiketin içine yazmaya devam edebilir. Varsayılan olarak, imleç, yeni eklenen metinden sonra sağa doğru görünür (benim durumumda, kapanış etiketinden hemen sonra). İşte

Ben İtalik düğmesi için var kod:,

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

Ancak bir şey yapmaz son satırı, imleç hareket etmez halde movePosition() döner true, hangi tüm işlemlerin başarıyla tamamlandığı anlamına gelir.

QTextCursor::Left yerine QTextCursor::PreviousCharacter ile bunu yapmayı denedim ve odağı düzenlemeye döndürmeden önce ve sonra hareket ettirmeyi denedim, bu hiçbir şeyi değiştirmiyor.

Soru şu ki, imleci QTextEdit sayfamın içinde nasıl hareket ettirebilirim?

cevap

9

Sorunu, belgelerin derinliklerine inerek çözdünüz.

textCursor() işlevi, QTextEdit imlecin kopyasını döndürür. Yani, fiili birini değiştirmek için, setTextCursor() işlevi kullanılmalıdır: `ui.translationInput-> moveCursor (QTextCursor :: Sol, QTextCursor:

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

doğrudan' moveCursor() 'kullanarak metin imleci hareket edebilir :: MoveAnchor, 4); ' – iliis

+0

Yukarıdaki yorumun bir cevaba dönüşmesi gerektiğini düşünüyorum. –