मुझे लगता है कि आपको QItemDelegate उपclass करने की आवश्यकता है।
QItemDelegate QAbstractItemView उपवर्गों के आधार पर कस्टम प्रदर्शन सुविधाओं और आइटम विचारों के लिए संपादक विगेट्स प्रदान करने के लिए इस्तेमाल किया जा सकता। इस उद्देश्य के लिए प्रतिनिधि का उपयोग प्रदर्शित करने और संपादन तंत्र को अनुकूलित और स्वतंत्र रूप से मॉडल और दृश्य से विकसित करने की अनुमति देता है।
यह कोड क्यूटी के उदाहरणों, धार आवेदन से लिया गया है।
class TorrentViewDelegate : public QItemDelegate
{
Q_OBJECT
public:
inline TorrentViewDelegate(MainWindow *mainWindow) : QItemDelegate(mainWindow) {}
inline void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if (index.column() != 2) {
QItemDelegate::paint(painter, option, index);
return;
}
// Set up a QStyleOptionProgressBar to precisely mimic the
// environment of a progress bar.
QStyleOptionProgressBar progressBarOption;
progressBarOption.state = QStyle::State_Enabled;
progressBarOption.direction = QApplication::layoutDirection();
progressBarOption.rect = option.rect;
progressBarOption.fontMetrics = QApplication::fontMetrics();
progressBarOption.minimum = 0;
progressBarOption.maximum = 100;
progressBarOption.textAlignment = Qt::AlignCenter;
progressBarOption.textVisible = true;
// Set the progress and text values of the style option.
int progress = qobject_cast<MainWindow *>(parent())->clientForRow(index.row())->progress();
progressBarOption.progress = progress < 0 ? 0 : progress;
progressBarOption.text = QString().sprintf("%d%%", progressBarOption.progress);
// Draw the progress bar onto the view.
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
}
};
मूल रूप से के रूप में आप देख सकते हैं यह जाँच करता है, तो स्तंभ रंगा जाना एक विशिष्ट सूचकांक की है, इसलिए यह एक प्रगति बार पेंट करता है, तो। मुझे लगता है कि आप इसे थोड़ा छोटा कर सकते हैं और QStyleOption का उपयोग करने के बजाय आप अपने विजेट का उपयोग कर सकते हैं।
संपादित करें: setItemDelegate का उपयोग करके अपने आइटम प्रतिनिधि को अपने QListView के साथ सेट करना न भूलें।
अपने प्रश्न की जांच करते समय मैंने this थ्रेड पर ठोकर खाई है, जो कि QItemDelegate का उपयोग करके एक कस्टम विजेट को पेंट करने का तरीका बताता है, मुझे विश्वास है कि इसमें आपकी सारी जानकारी हो सकती है।
स्रोत
2009-06-04 07:38:13
पोस्ट के लिए धन्यवाद, मैं और अधिक कल इस पर गौर करेंगे। क्या आप विस्तृत विजेट के साथ QStyleOption ड्राइंग को बदलने के बारे में विस्तार से बता सकते हैं? –
अच्छी तरह से यह QItemDelegate की पेंट विधि में प्रदान किए गए QPainter के साथ अपने विजेट को पेंट करने का मामला है। मैंने एक उपयोगी लिंक शामिल करने के लिए अपनी पोस्ट संपादित की है। –
ठीक है, मैं इस तकनीक का उपयोग कर किसी न किसी काम कर सकता हूं। लेकिन मुद्दा "मनमाना विजेट" पहलू है - मेरे पास एक कंपाउंड विजेट है जिसमें बटन, आदि शामिल हैं, जो इंटरैक्टिव हैं - इसलिए उन्हें सूची में शारीरिक रूप से रखा जाना चाहिए या उपयोगकर्ता उन पर क्लिक करने में सक्षम नहीं है। अगर मैं गलत हूं तो मुझे सही करें, लेकिन यह केवल एक निष्क्रिय विजेट खींच जाएगा। –