2011-06-15 21 views
9

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

तो, मेरे पास QTableView है जिसमें कॉलम हैं जिन्हें उपयोगकर्ता पसंद के रूप में दिखाया/छुपाया जा सकता है। तालिका शुरू करने के बाद, मैं एक कस्टम restoreColumns() विधि कॉल करता हूं जो कॉलम को छुपाता है (QTableView::hideColumn() का उपयोग करके) कि उपयोगकर्ता ने आखिरी बार जीयूआई खोला था।

समस्या तब आती है जब उपयोगकर्ता अंतिम बार GUI चलाए गए उपयोगकर्ता द्वारा छुपाए गए कॉलम दिखाने की कोशिश करता है। उपयुक्त सिग्नल/स्लॉट को कॉल किया जाता है और चलाया जाता है लेकिन किसी कारण से QTableView कॉलम प्रदर्शित करने के लिए अपडेट नहीं हो रहा है।

अजीब बात यह है कि कोई भी कॉलम जो पहले से प्रदर्शित होता है (पिछली बार जीयूआई चलाया गया था) उपयोगकर्ता द्वारा छुपाया गया था) छुपा/दिखाया जाने में कोई समस्या नहीं है।

कोई विचार? धन्यवाद!/स्तंभों में से एक को छिपाने

for (int i=0; i<horizontalHeader()->count(); i++) { 
    // load size to restore previous width 
    ... 
    horizontalHeader()->resizeSection(i, width); // restore width 

    // load previous column position 
    ... 
    // restore column order 
    int currentVisualIndex = horizontalHeader()->visualIndex(i); 

    if (currentVisualIndex != visualIndex) 
     horizontalHeader()->moveSection(currentVisualIndex, visualIndex); 

    // load previous hidden/shown state 
    ... 
    if (columnHidden) { 
     hideColumn(i); 
    } else { 
     showColumn(i); 
    } 
} 

नीचे दिखाने के लिए कुछ नमूना कोड है:


यहाँ मैं कैसे तालिका प्रारंभ ...

m_tableModel = new mytablemodel(); 
m_tableView = new mytableview(); 
m_tableView->setItemDelegate(m_tableDelegate); 
m_tableView->setModel(m_tableModel); 

restoreColumns के मांस() विधि ।

void mytableview::showAColumn(bool checked) { 
    // mytableview is a subclass of qtableview 
    if (checked) 
     showColumn(COLUMN_A); // COLUMN_A is an enum for the column 
    else 
     hideColumn(COLUMN_A); 
} 

जो एक QAction कि QTableView की QHeaderView के मेनू और संदर्भ मेनू से पहुँचा जा सकता से जुड़ा है।

connect(action, SIGNAL(toggled(bool)), this, SLOT(showAColumn(bool))); 
+0

क्या आप 'showize()' के बाद एक ''resizeColumnToContents'] (http://doc.qt.nokia.com/latest/qtableview.html#resizeColumnToContents) कॉल करने का प्रयास कर सकते हैं? (मुझे लगता है कि 'छुपा' बहुत जल्दी होता है, कॉलम का अमान्य आकार हो सकता है) – Mat

+0

कोशिश की - कोई बदलाव नहीं। मुझे लगता है कि यह देखने के लिए कुछ है कि कैसे छुपा कॉलमव्यू स्क्रीन पर चित्रित करने से पहले आता है ... वास्तव में यह सुनिश्चित नहीं है कि मैं तालिका पुनर्स्थापना के बाद मेरे पुनर्स्थापना कॉलम() विधि को कॉल करने के बारे में कैसे कहूंगा। – Daren

+0

मैंने अभी पुनर्स्थापित कॉलम() विधि में कुछ और विवरण जोड़े हैं। ऐसा सामान लगता है जहां मैं कॉलम का आकार बदल रहा हूं, जहां यह गड़बड़ हो जाता है। जब मैंने उस सेक्शन पर टिप्पणी की तो यह उम्मीद के अनुसार काम किया। हालांकि, मैंने पिछली कॉलम चौड़ाई को पुनर्स्थापित करने की क्षमता खो दी ... – Daren

उत्तर

5

आप छिपे हुए स्तंभ के पिछले चौड़ाई लोड हो रहा है कर रहे हैं, चौड़ाई कि इसलिए, जब स्तंभ का आकार बदलने के लिए सुनिश्चित चौड़ाई से अधिक 0.
क्या यह है कि बनाने 0.
था बचाया और किया गया था तो स्तंभ अपेक्षित के रूप में दिखाएंगे/छुपाएंगे।

+0

इसे क्यूटी 'QTableView :: hideColumn()' विवरण में दस्तावेज किया जाना चाहिए। – phyatt

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