2012-02-29 8 views
10

फिट करने के लिए आकार बदलें मेरे पास QTextEdit है जो "डिस्प्लेर" (झूठी संपादन योग्य) के रूप में कार्य करता है। यह पाठ प्रदर्शित करता है शब्द वर्डप्रेस है। अब मैं इस टेक्स्टबॉक्स की ऊंचाई सेट करना चाहता हूं ताकि टेक्स्ट ठीक से फिट हो (जबकि अधिकतम ऊंचाई का सम्मान भी हो)।qtextedit -

मूल रूप से लेआउट के नीचे विजेट (उसी लंबवत लेआउट में) जितना संभव हो उतना स्थान प्राप्त करना चाहिए।

यह आसानी से कैसे प्राप्त किया जा सकता है? अंतर्निहित पाठ की

+1

नहीं कर सकते –

+0

मतलब qtextedit क्यूटी लाइब्रेरी में qtextbox मिल जाए, (लिंक के साथ) – paul23

+0

आप (अधिकतम ऊंचाई निर्धारित करने के लिए), आप एक ही कोड मैं वहाँ दिया इस्तेमाल कर सकते हैं एक और QScrollArea अंदर QTextEdit डालें, तो तय: http: // stackoverflow .com/प्रश्न/7301785/प्रतिक्रिया-पर-res -izing-of-a-qmainwindow-for-adjust-widgets-size – alexisdm

उत्तर

1

वर्तमान आकार के माध्यम से

QTextEdit::document()->size(); 

उपलब्ध हो सकता है और मुझे विश्वास है कि इस का उपयोग करते हुए हम इसके अनुसार विजेट का आकार बदलने सकता है।

#include <QTextEdit> 
#include <QApplication> 
#include <iostream> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QTextEdit te ("blah blah blah blah blah blah blah blah blah blah blah blah"); 
    te.show(); 
    cout << te.document()->size().height() << endl; 
    cout << te.document()->size().width() << endl; 
    cout << te.size().height() << endl; 
    cout << te.size().width() << endl; 
// and you can resize then how do you like, e.g. : 
    te.resize(te.document()->size().width(), 
       te.document()->size().height() + 10); 
    return a.exec();  
} 
+0

क्या "दस्तावेज़" में कनवर्ट करते समय शब्द-लपेटना खो गया है? – paul23

+0

मैंने जो कोड डाला है उसे संकलित करने का प्रयास करें, आपको विजेट के आकार और निहित दस्तावेज़ के आकार के बीच अंतर दिखाई देगा। शब्द-लपेटना खो नहीं गया है। लेकिन आपको पहले विजेट दिखाना होगा। –

+0

वैसे यह वास्तव में काम नहीं करता है - क्योंकि 'setText() 'कमांड का उपयोग करते समय आकार सेट नहीं किया गया है। – paul23

2

जब तक वहाँ एक QTextEdit है कि आप की जरूरत है, की क्षमताओं के लिए कुछ विशेष है शब्द चादर के साथ एक QLabel चालू आप वास्तव में क्या चाहते हो जाएगा।

+4

अच्छी तरह से qlabel शब्द सीमाओं पर केवल शब्दवृत्त - न ही यह स्क्रॉलबार दिखाता है जब डेटा बहुत बड़ा हो जाता है। मैंने एक लेबल का उपयोग शुरू किया, लेकिन मुझे लगता है कि दोनों फ़ीचर सेटों की आवश्यकता है ... – paul23

+1

ठीक है, तो 'QLabel' तब काम नहीं करेगा :) –

8

मैं QFontMetrics का उपयोग कर एक बहुत स्थिर, आसान समाधान मिल गया!

from PyQt4 import QtGui 

text = ("The answer is QFontMetrics\n." 
     "\n" 
     "The layout system messes with the width that QTextEdit thinks it\n" 
     "needs to be. Instead, let's ignore the GUI entirely by using\n" 
     "QFontMetrics. This can tell us the size of our text\n" 
     "given a certain font, regardless of the GUI it which that text will be displayed.") 

app = QtGui.QApplication([]) 

textEdit = QtGui.QPlainTextEdit() 
textEdit.setPlainText(text) 
textEdit.setLineWrapMode(True)  # not necessary, but proves the example 

font = textEdit.document().defaultFont() # or another font if you change it 
fontMetrics = QtGui.QFontMetrics(font)  # a QFontMetrics based on our font 
textSize = fontMetrics.size(0, text) 

textWidth = textSize.width() + 30  # constant may need to be tweaked 
textHeight = textSize.height() + 30  # constant may need to be tweaked 

textEdit.setMinimumSize(textWidth, textHeight) # good if you want to insert this into a layout 
textEdit.resize(textWidth, textHeight)   # good if you want this to be standalone 

textEdit.show() 

app.exec_() 

(मुझे माफ कर दो, मुझे पता है आपके प्रश्न के बारे में सी ++ है, और मैं अजगर का उपयोग कर रहा है, लेकिन Qt में वे काफी वैसे भी एक ही बात कर रहे हैं)।

0

पायथन की बात करते हुए, मुझे वास्तव में .setFixedWidth(your_width_integer) और .setFixedSize(your_width, your_height) काफी उपयोगी मिला। सुनिश्चित नहीं है कि सी में समान विजेट विशेषताएँ हैं या नहीं।

0

मेरे मामले में, मैंने अपने QLabel को QScrollArea के अंदर रखा। और यदि आप उत्सुक हैं, तो आप दोनों को गठबंधन करते हैं और अपना स्वयं का विजेट बनाते हैं।

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