2010-08-08 25 views
27

पर आकार बदल गए हैं, मुझे यकीन नहीं है कि यह कैसे पूछें, इसलिए, अधिक जानकारी के लिए स्वतंत्र महसूस करें।यह सुनिश्चित करने के लिए कि QTableView में कॉलम अधिकतम

ऐसा लगता है कि tableView->resizeColumnsToContents() केवल वर्तमान दृश्य में डेटा के आधार पर सभी कॉलम का आकार बदल देगा। जिसका अर्थ है कि यदि मेरे पास नीचे अधिक डेटा है (जो शब्दों की गणना के मामले में लंबा है), तो उन शब्दों को लपेटा जाएगा (यदि wordWrap संपत्ति सत्य पर सेट है)।

अजीब बात यह है कि, यदि मैं नीचे तक स्क्रॉल करता हूं और डेटा रीफ्रेश करता हूं, tableView उन स्तंभों को सही ढंग से आकार देगा। ऐसा लगता है जैसे tableView पता नहीं था कि नीचे लंबा टेक्स्ट है।

तो, मेरा सवाल यह है कि, मैं कैसे सुनिश्चित कर सकता हूं कि उन कॉलमों को सभी डेटा के आधार पर अधिकतम आकार में बदल दिया गया हो?

मेरे कोड

QSqlTableModel *model = new QSqlTableModel; 
model->setTable("item"); 
model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
model->select();  
tableResult->setModel(model);  
tableResult->setEditTriggers(QAbstractItemView::NoEditTriggers);  
tableResult->setSelectionBehavior(QAbstractItemView::SelectRows); 
tableResult->setSelectionMode(QAbstractItemView::SingleSelection);  
tableResult->resizeColumnsToContents(); 
tableResult->resizeRowsToContents(); 

अद्यतन 1

मैं tableResult->scrollToBottom() की कोशिश की है और यह केवल निचले भाग में आइटम के आधार पर आकार परिवर्तन कर देंगे। इसलिए, यदि बीच में लंबे शब्द हैं, तो वे शब्द लपेट जाएंगे।

अद्यतन 2

किसी को समझने के लिए मैं क्या, बस download इस उदाहरण बात कर रहा हूँ चाहते हैं, तो। आप देखेंगे कि पुशबटन पर क्लिक करने से वह डेटा उत्पन्न होगा जो सही ढंग से आकार में नहीं बदला गया है।

अद्यतन 3

संभवतः एक बग: https://bugreports.qt.io/browse/QTBUG-9352

+0

मुझे यह समस्या भी है। केवल पंक्तियां जो दृश्यमान आकार बदलती हैं। क्या आपको कभी इसके लिए कोई फिक्स मिला? – ComputerEngineer88

उत्तर

38

मैं इस समस्या के लिए एक समाधान खोजने के लिए प्रबंधित, तो आप सिर्फ resizeColumnsToContents() कॉल करने से पहले तालिका को छिपाने के लिए की जरूरत है।

एक उदाहरण के लिए:

tableResult->setVisible(false); 
tableResult->resizeColumnsToContents(); 
tableResult->setVisible(true); 
+1

+1 Beautifül!कभी इसके बारे में सोचा नहीं होगा ... –

+1

आश्चर्यजनक रूप से, 'table.resizeColumnsToContents() 'PyQt5 – zdimension

+2

के साथ तालिका को छिपाने/दिखाने के बिना काम करता है Qt 5.6 में भी' table.resizeColumnsToContents()' तालिका छिपाने/दिखाए बिना काम करता है – Indraraj

5

मुझे लगता है कि है, क्योंकि मांग पर QSqlTableModel लोड डेटा और देखने स्तंभ डेटा ही उपलब्ध है के आधार पर चौड़ाई गणना करता है। आप उपयोगकर्ता के आकार बदलने योग्य होने के लिए अपने कॉलम की जरूरत नहीं है, तो आप इस कोशिश कर सकते हैं:

tableResult->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); 
+0

यह काम नहीं कर रहा है। कॉलम अभी भी सही ढंग से आकार बदल नहीं रहा है। मैंने फ़ंक्शन के अंत में कोड डाला। मैंने QLandardItemModel के साथ डेटा के स्रोत के रूप में QList भी कोशिश की है। – amree

4

मैं के रूप में amree, जो स्तंभ चौड़ाई के लिए महान काम किया द्वारा वर्णित है, लेकिन tableView->resizeRowsToContents() सही ढंग से काम नहीं कर रहा था, तो किसी भी गुप्त कॉलम बहु कोशिकाओं होना चाहिए था कि एक ही समाधान का इस्तेमाल किया एक पंक्ति की ऊंचाई में वृद्धि हुई।

मैंने क्यूटी स्रोत में देखा और ऐसा लगता है कि कुछ गणना व्यूपोर्ट ज्यामिति पर निर्भर करती है। ऐसा लगता है कि सब कुछ कॉलम और पंक्तियों के लिए सही ढंग से काम करता है:

#include <limits> 

tableView->setVisible(false); 
QRect vporig = tableView->viewport()->geometry(); 
QRect vpnew = vporig; 
vpnew.setWidth(std::numeric_limits<int>::max()); 
tableView->viewport()->setGeometry(vpnew); 
tableView->resizeColumnsToContents(); 
tableView->resizeRowsToContents(); 
tableView->viewport()->setGeometry(vporig); 
tableView.setVisible(true); 
+2

एमरी के जवाब ने मेरी मदद की, लेकिन मैं एक ही समय में स्वत: आकार देने वाली पंक्ति ऊंचाई के साथ एक समस्या में भाग गया और सोचा कि भविष्य के पाठकों के लिए यह निकटता से संबंधित समस्या के समाधान के लिए सहायक होगा। "अनिवार्य रूप से कुछ भी नहीं" से थोड़ा अधिक, मैं कहूंगा। – dougg3

+0

बढ़िया, मैं इतनी देर के लिए उस मुद्दे को हल करने की कोशिश कर रहा हूं! –

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