मैं एक 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 द्वारा तैयार से अधिक रंग नहीं कर सकते। इसके अलावा, मेरी टेबल क्लास को यह जानने की जरूरत है कि सीमा कहाँ खींची गई है।
धन्यवाद! यह अब बहुत बेहतर काम कर रहा है। हालांकि अभी भी कुछ बिट्स बचे हुए हैं, जैसा कि आप देखते हैं [यहां] (http://i.imgur.com/9Zoyw.png)। यदि आप जानते हैं कि मुझे क्या पता है, अन्यथा आप पहले से ही बहुत मदद कर चुके हैं। – buck
परिशिष्ट: मैं यह तय - आप व्यूपोर्ट() फोन करता है, तो -> अद्यतन(); इसके बजाय यह सभी समस्याओं को हल करता है। धन्यवाद! – buck