मैं ऐसा कुछ करने की कोशिश कर रहा हूं जो ऐसा लगता है कि यह बहुत आसान होना चाहिए, लेकिन जितना अधिक मैं इसे देखता हूं मुझे आश्चर्य है कि यह एक क्यूटी बग है या नहीं।एक छिपी 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)));
क्या आप 'showize()' के बाद एक ''resizeColumnToContents'] (http://doc.qt.nokia.com/latest/qtableview.html#resizeColumnToContents) कॉल करने का प्रयास कर सकते हैं? (मुझे लगता है कि 'छुपा' बहुत जल्दी होता है, कॉलम का अमान्य आकार हो सकता है) – Mat
कोशिश की - कोई बदलाव नहीं। मुझे लगता है कि यह देखने के लिए कुछ है कि कैसे छुपा कॉलमव्यू स्क्रीन पर चित्रित करने से पहले आता है ... वास्तव में यह सुनिश्चित नहीं है कि मैं तालिका पुनर्स्थापना के बाद मेरे पुनर्स्थापना कॉलम() विधि को कॉल करने के बारे में कैसे कहूंगा। – Daren
मैंने अभी पुनर्स्थापित कॉलम() विधि में कुछ और विवरण जोड़े हैं। ऐसा सामान लगता है जहां मैं कॉलम का आकार बदल रहा हूं, जहां यह गड़बड़ हो जाता है। जब मैंने उस सेक्शन पर टिप्पणी की तो यह उम्मीद के अनुसार काम किया। हालांकि, मैंने पिछली कॉलम चौड़ाई को पुनर्स्थापित करने की क्षमता खो दी ... – Daren