2012-07-27 9 views
8

के अंदर कर्सर को स्थानांतरित करना मेरे पास QTextEdit पर एक फॉर्म है, जिसे translationInput कहा जाता है। मैं उपयोगकर्ता के लिए संपादन कार्यक्षमता प्रदान करने की कोशिश कर रहा हूं।QTextEdit

यह QTextEdit में HTML-स्वरूपित टेक्स्ट होगा। मेरे पास बटनों का एक सेट है, जैसे "बोल्ड", "इटालिक", और इसी तरह, जो दस्तावेज़ में संबंधित टैग जोड़ना चाहिए। यदि कोई टेक्स्ट चयनित नहीं होने पर बटन दबाया जाता है, तो मैं सिर्फ टैग की एक जोड़ी डालना चाहता हूं, उदाहरण के लिए, <b></b>। अगर कुछ पाठ चुना जाता है, तो मैं चाहता हूं कि टैग बाएं और दाएं दिखाई दें।

यह ठीक काम करता है। हालांकि, मैं कर्सर को को समापन टैग से पहले रखना चाहता हूं, इसलिए उपयोगकर्ता कर्सर को मैन्युअल रूप से पुनर्स्थापित करने के बिना नए जोड़े गए टैग के अंदर टाइपिंग जारी रख पाएगा। डिफ़ॉल्ट रूप से, कर्सर के बाद नया जोड़ा गया टेक्स्ट दिखाई देता है (इसलिए मेरे मामले में, बंद टैग के ठीक बाद)।

यहाँ कोड मैं इटैलिक बटन के लिए है कि क्या है:,

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

हालांकि, अंतिम पंक्ति में कुछ भी नहीं है, कर्सर ले जाने नहीं करता है, भले ही movePosition() रिटर्न true, जो इसका मतलब है कि सभी परिचालन सफलतापूर्वक पूरा किए गए थे।

मैंने के बजाय QTextCursor::PreviousCharacter के साथ ऐसा करने का भी प्रयास किया है, और इसे संपादित करने के लिए पहले और बाद में इसे स्थानांतरित करने का प्रयास किया है, जो कुछ भी नहीं बदलता है।

तो सवाल यह है कि, मैं अपने QTextEdit के अंदर कर्सर को कैसे स्थानांतरित करूं?

उत्तर

9

दस्तावेज़ों में गहरी खुदाई करके इस मुद्दे को हल किया।

textCursor() फ़ंक्शन एक QTextEdit से कर्सर की कॉपी। तो, वास्तविक एक संशोधित करने के लिए, setTextCursor() समारोह इस्तेमाल किया जाना चाहिए: `ui.translationInput-> moveCursor (QTextCursor :: वाम, QTextCursor:

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

आप सीधे moveCursor()' का उपयोग कर 'द्वारा पाठ कर्सर ले जाने के कर सकते हैं :: MoveAnchor, 4); ' – iliis

+0

मुझे लगता है कि उपर्युक्त टिप्पणी को उत्तर में बदल दिया जाना चाहिए। –

संबंधित मुद्दे