मुझे सिर्फ QTextEdit में क्यूटी में टैब आकार को बदलने का तरीका जानने की आवश्यकता है। मेरा Google और stackoverflow खोज ने मुझे शून्य वापस कर दिया। अग्रिम में धन्यवाद।क्यूटी में टैब चौड़ाई को ओवरराइड करने के लिए कैसे?
उत्तर
का समाधान हो सकता है, आपको पहले एक निश्चित-चौड़ाई (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(' '));
QTextEdit::tabStopWidth
संपत्ति आप QTextEdit
का उपयोग कर एक स्रोत कोड संपादक बनाना चाहते हैं आपकी समस्या (प्रलेखन के लिए here देखें ...)
आपके उत्तर के लिए धन्यवाद, इसे आजमाने के लिए मैंने TabStopWidth को 40 पर सेट किया, इसलिए यह मेरा टैब आकार बदल गया। लेकिन यह 11 अंतरिक्ष वर्णों और 5 वर्णों से मेल खाता है। क्यों सभी charachters अलग आकार है? मैं चाहता हूं कि मेरा संपादक स्रोत कोड संपादकों की तरह व्यवहार करे। मुझे क्या याद आ रहा है –
कूरियर न्यू जैसे मोनोस्पेस फ़ॉन्ट का उपयोग करें और आपके सभी पात्रों की एक ही चौड़ाई होगी। – JonathanK
एक अंतरिक्ष और संख्या रिक्त स्थान के आकार का एक उत्पाद कम्प्यूटिंग हमेशा सटीक नहीं है (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));
@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));
'tabStopWidth' संपत्ति के बारे में कैसे? http://doc.qt.digia.com/qt/qtextedit.html#tabStopWidth-prop – fasked