2012-04-20 13 views
10

में लाइन स्पेसिंग सेट करें, मैं QTextEdit की लाइन दूरी सेट करना चाहता हूं।QTextEdit

यह

QFontMetrics::lineSpacing(); 

लेकिन वह कैसे स्थापित करने के लिए के साथ कि जानकारी पाने के लिए कोई समस्या नहीं है?

मैं स्टाइलशीट साथ कोशिश की, लेकिन बात नहीं बनी:

this->setStyleSheet("QTextEdit{ height: 200%; }"); 

या

this->setStyleSheet("QTextEdit{ line-height: 200%; }"); 

आंशिक समाधान:

ठीक है, मैं एक समाधान मिल गया है - जिस तरह से मैं इसे चाहता था, लेकिन कम से कम यह आसान है और यह लगभग मेरे इरादे से व्यवहार करता है, जो मेरे अवधारणा के सबूत के लिए पर्याप्त है।

प्रत्येक नई लाइन पर कुछ लाइनस्पेसिंग है। लेकिन अगर आप तब तक टाइप करते हैं जब तक टेक्स्ट स्वचालित रूप से एक नई लाइन पर लपेट नहीं जाता है, तो आपके पास इन दो पंक्तियों के बीच लाइन-स्पेसिंग नहीं होता है। यह हैक केवल टेक्स्ट ब्लॉक के साथ काम करता है, कोड देखें।

बस ध्यान रखें कि यह क्रूर बल और बदसूरत हैक है। लेकिन यह आपके सुंदर QTextEdit को किसी प्रकार का लाइन-स्पेसिंग प्रदान करता है। जब भी आपका टेक्स्ट बदलता है, इसे हर बार कॉल करें।

void setLineSpacing(int lineSpacing) { 
    int lineCount = 0; 
    for (QTextBlock block = this->document()->begin(); block.isValid(); 
      block = block.next(), ++lineCount) { 
     QTextCursor tc = QTextCursor(block); 
     QTextBlockFormat fmt = block.blockFormat(); 
     if (fmt.topMargin() != lineSpacing 
       || fmt.bottomMargin() != lineSpacing) { 
      fmt.setTopMargin(lineSpacing); 
      //fmt.setBottomMargin(lineSpacing); 
      tc.setBlockFormat(fmt); 
     } 
    } 
} 
+0

फिर भी, एक अच्छा समाधान बहुत रुचि की होगी। – qwc

उत्तर

4

QFontMetrics में फ़ॉन्ट फ़ाइल से आने वाले स्थिर गुण (नाम के अनुसार) स्थिर गुण होते हैं। पूंजी "सी" कितनी व्यापक है, आदि lineSpacing() आपको सिंगल-स्पेसिंग में प्राकृतिक दूरी मिलती है, जिसने फ़ॉन्ट को फ़ॉन्ट में एन्कोड किया है।

http://fontforge.sourceforge.net/faq.html#linespace

एक QTextEdit में पंक्ति रिक्ति के लिए के रूप में ... ऐसा लगता है: आप वास्तव में कि (तुम नहीं) ... कैसे यहाँ बताया जाता है की कुछ हद तक जटिल कहानी को बदलना चाहते हैं, तो (मेरे लिए) कि तरह बातें पाठ "लेआउट" निर्दिष्ट करने के लिए कि क्यूटी के तानाना मॉडल के अंतर्गत आता है के रूप में देखा जाता है:

http://doc.qt.io/qt-4.8/richtext-layouts.html

आप अपने स्वयं के लेआउट वर्ग QTextDocument के बजाय आपूर्ति डिफ़ॉल्ट का उपयोग होगा । किसी ने इसे यहाँ की कोशिश की लेकिन उनके पूरा कोड पोस्ट नहीं किया:

http://www.qtcentre.org/threads/4198-QTextEdit-with-custom-space-between-lines

+0

नरक, मैं उस पर क्यों ठोकर नहीं लगा? मैं तुरंत कोशिश करूँगा। :) – qwc

+0

ठीक है, स्थिर पाठ ड्राइंग आसान है। लेकिन QTextEdit के भीतर संपादन योग्य पाठ में वह लेआउट प्राप्त करना कुछ मोटे किनारों के आसपास जाता है। – qwc

+0

असुरक्षित। आप अपने क्यूटी संस्करण के लिए डिफ़ॉल्ट QTextLayout के स्रोत से काम करने का प्रयास कर सकते हैं, शायद इससे प्राप्त हो सकते हैं और आपको लगता है कि बिट्स को ओवरराइड कर सकते हैं? 4.7 में यह था: http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/text/qtextlayout.cpp – HostileFork

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