2012-10-23 33 views
14

मुझे सिर्फ QTextEdit में क्यूटी में टैब आकार को बदलने का तरीका जानने की आवश्यकता है। मेरा Google और stackoverflow खोज ने मुझे शून्य वापस कर दिया। अग्रिम में धन्यवाद।क्यूटी में टैब चौड़ाई को ओवरराइड करने के लिए कैसे?

+1

'tabStopWidth' संपत्ति के बारे में कैसे? http://doc.qt.digia.com/qt/qtextedit.html#tabStopWidth-prop – fasked

उत्तर

24

का समाधान हो सकता है, आपको पहले एक निश्चित-चौड़ाई (monospace) फ़ॉन्ट आवंटित करने चाहिए। यह सुनिश्चित करता है कि सभी पात्रों को एक ही चौड़ाई:

QFont font; 
font.setFamily("Courier"); 
font.setStyleHint(QFont::Monospace); 
font.setFixedPitch(true); 
font.setPointSize(10); 

QTextEdit* editor = new QTextEdit(); 
editor->setFont(font); 

आप, रिक्त स्थान की निश्चित राशि के लिए एक टैब चौड़ाई सेट करने के रूप में यह आम तौर पर पाठ संपादक में किया जाता है, QFontMetrics का उपयोग में एक अंतरिक्ष के आकार की गणना करना चाहते हैं पिक्सल:

const int tabStop = 4; // 4 characters 

QFontMetrics metrics(font); 
editor->setTabStopWidth(tabStop * metrics.width(' ')); 
8

QTextEdit::tabStopWidth संपत्ति आप QTextEdit का उपयोग कर एक स्रोत कोड संपादक बनाना चाहते हैं आपकी समस्या (प्रलेखन के लिए here देखें ...)

+1

आपके उत्तर के लिए धन्यवाद, इसे आजमाने के लिए मैंने TabStopWidth को 40 पर सेट किया, इसलिए यह मेरा टैब आकार बदल गया। लेकिन यह 11 अंतरिक्ष वर्णों और 5 वर्णों से मेल खाता है। क्यों सभी charachters अलग आकार है? मैं चाहता हूं कि मेरा संपादक स्रोत कोड संपादकों की तरह व्यवहार करे। मुझे क्या याद आ रहा है –

+0

कूरियर न्यू जैसे मोनोस्पेस फ़ॉन्ट का उपयोग करें और आपके सभी पात्रों की एक ही चौड़ाई होगी। – JonathanK

1

एक अंतरिक्ष और संख्या रिक्त स्थान के आकार का एक उत्पाद कम्प्यूटिंग हमेशा सटीक नहीं है (MacOS, मोनाको फॉन्ट के तहत परीक्षण किया), शायद वास्तविक स्ट्रिंग में वर्णों के बीच में कुछ अंतराल की वजह से। एक बेहतर समाधान स्पेस tabStop युक्त स्ट्रिंग की लंबाई को मापने के लिए किया जाएगा:

const int tabStop = 4; // 4 characters 

QString spaces; 
for (int i = 0; i < tabStop; ++i) { 
    spaces += " "; 
} 

QFontMetrics metrics(font); 
editor->setTabStopWidth(metrics.width(spaces)); 
2

@Ferdinand बेयर का समाधान कुछ सिस्टम पर काम करते हैं, आम तौर पर फोंट पूर्णांक मैट्रिक्स के लिए गारंटी नहीं है। उदाहरण के लिए 12pt DejaVu Sans Mono मेरे लिनक्स सेटअप पर 9.625 की वर्ण चौड़ाई है। मुझे मिला सबसे अच्छा समाधान पिक्सेल-सही संरेखण प्राप्त करने के लिए कुछ अक्षर अंतर जोड़ना है।

int tabstop = 4; 

QFontMetricsF fm (ui->textEdit->font()); 
auto stopWidth = tabstop * fm.width(' '); 
auto letterSpacing = (ceil(stopWidth) - stopWidth)/tabstop; 

auto font = ui->textEdit->font(); 
font.setLetterSpacing(QFont::AbsoluteSpacing, letterSpacing); 
ui->textEdit->setFont(font); 

ui->textEdit->setTabStopWidth(ceil(stopWidth));