2010-12-10 13 views
20

मुझे QTableView की तालिका पंक्ति के भीतर एक बटन/लिंक रखने की क्षमता की आवश्यकता है। यह उस पंक्ति को अधिक कुशलता से संपादित करने की अनुमति देने के लिए एक संवाद खोलना है।क्यूटी - QTableView - तालिका पंक्ति में क्लिक करने योग्य बटन

वेब पर देखने के घंटों के बाद मुझे अभी तक एक सभ्य उदाहरण नहीं मिला है।

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

किसी भी मदद की सराहना की जाएगी।

+0

आप "तालिका पंक्ति में बटन" कह कर क्या मतलब है? पूरी पंक्ति? या एक ही सेल में? –

उत्तर

1

आप क्लिक करने योग्य पाठ रेखांकित, तो कब्ज़ा करके लिंक की कार्यक्षमता का अनुकरण कर सकते हैं:

उदाहरण के लिए, दूसरी पंक्ति (अपरीक्षित कोड) के पहले कॉलम में एक पुश बटन एम्बेड करने के लिए सेल सेलक्लिक (पंक्ति, कोला) सिग्नल के माध्यम से क्लिक करें और उस कॉल == संपादित कॉलम को जांचें। फिर पंक्ति उस वस्तु से मेल खाती है जिसे आप संपादित कर रहे हैं।

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

डेटा नाम | मान 1 | मूल्य 2 | संपादित

connect (tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(editSlot(int, int))); 

... 

void ClassName::editSlot(int row, int col){ 
    if (col == 3) { 
    doWork(row); 
    } 
} 
+0

स्वीकृत उत्तर वास्तव में प्रश्न का उत्तर देने में असफल क्यों होता है? एक नया सिग्नल-स्लॉट कनेक्शन को परिभाषित करने के लिए केवल एक स्थिर बटन या तालिका परिभाषा समय पर किसी तालिका आइटम से लिंक करना गैरकानूनी है। ईमानदारी से, StackOverflow को वर्तमान में सबसे अधिक अपवॉट्स को "स्वीकृत" के रूप में प्राप्त करने वाले उत्तर को गतिशील रूप से चिह्नित करने के लिए डिफ़ॉल्ट होना चाहिए। –

20

इसके लिए आप setIndexWidget का उपयोग कर सकते हैं, अधिक जानकारी के लिए Qt documentation देखें।

tableView->setIndexWidget(tableView->model()->index(2, 1), new QPushButton); 
+1

मैंने पढ़ा है कि बड़े डेटासेट पर, पंक्ति स्तर विजेट सेट करने से एक उल्लेखनीय प्रदर्शन हानि हो सकती है। – cweston

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