2011-06-29 10 views
6

मैं एक QTableView, जहां एक सीमा पूरी वर्तमान चयन के आसपास चित्रित है में व्यवहार समान एक्सेल लागू करने के लिए कोशिश कर रहा हूँ चारों ओर बॉर्डर आकर्षित। मैंने यह कोशिश की है कि सौ अलग-अलग तरीकों से क्या लगता है और समस्याएं बरकरार रहती हैं। मैं आसानी से पर्याप्त सीमा आकर्षित कर सकते हैं, लेकिन सीमा के अवशेष जब भी चयन परिवर्तन छोड़ दिया जाता है। यहाँ एक उदाहरण मैं QTableView में की कोशिश की है :: paintEvent है ...क्यूटी QTableView सक्रिय कोशिकाओं


void MyTableView::paintEvent(QPaintEvent* event) 
{ 
    // call QTableView's paint event first so we can draw over it 
    QTableView::paintEvent(event); 

    // activeSelection is a list of indexes that is updated in another function 
    // the function also calls QTableView::repaint whenever this list changes 
    // in an attempt to erase the previously drawn border 
    if(!activeSelection.size()) 
     return; 

    QRect rect = visualRect(activeSelection.at(0)) | 
      visualRect(activeSelection.at(activeSelection.size() - 1)); 
    // temporarily draw smaller border so it doesn't lie on the grid lines 
    rect.adjust(4, 4, -4, -4); 
    QPen pen(Qt::black, 2); 
    QPainter painter(viewport()); 
    painter.setPen(pen); 
    painter.drawRect(rect); 
} 

कि कोड का उत्पादन परिणाम इस तरह के this

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

उत्तर

4

अद्यतन (कॉल करने के लिए) की कोशिश; आपके चयन में परिवर्तन समारोह। यह आपके कार्यान्वयन को धीमा कर देगा, लेकिन कचरा हटा देगा।

+0

धन्यवाद! यह अब बहुत बेहतर काम कर रहा है। हालांकि अभी भी कुछ बिट्स बचे हुए हैं, जैसा कि आप देखते हैं [यहां] (http://i.imgur.com/9Zoyw.png)। यदि आप जानते हैं कि मुझे क्या पता है, अन्यथा आप पहले से ही बहुत मदद कर चुके हैं। – buck

+2

परिशिष्ट: मैं यह तय - आप व्यूपोर्ट() फोन करता है, तो -> अद्यतन(); इसके बजाय यह सभी समस्याओं को हल करता है। धन्यवाद! – buck

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