ฉันประสบปัญหาในการใช้การแสดงผลวิดเจ็ตแบบกำหนดเองใน QListView
ขณะนี้ฉันมี QListView
แสดงโมเดลที่กำหนดเองของฉันชื่อ PlayQueue
ตาม QAbstractListModel
สิ่งนี้ทำงานได้ดีกับข้อความธรรมดา แต่ตอนนี้ฉันต้องการแสดงวิดเจ็ตที่กำหนดเองสำหรับแต่ละองค์ประกอบ ดังนั้นฉันจึงจัดคลาสย่อย QStyledItemDelegate
เพื่อนำเมธอด paint
ไปใช้ดังนี้:
void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
QWidget *widget = new QPushButton("bonjour");
widget->render(painter);
}
พื้นหลังการเลือกแสดงผลอย่างถูกต้อง แต่ไม่มีการแสดงวิดเจ็ต ฉันลองใช้คำสั่ง QPainter
ง่ายๆ เหมือนในตัวอย่าง Qt และนี่ก็ใช้ได้ดี:
void QueueableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
if (option.state & QStyle::State_Selected)
painter->setPen(option.palette.highlightedText().color());
painter->setFont(QFont("Arial", 10));
painter->drawText(option.rect, Qt::AlignCenter, "Custom drawing");
}
ดังนั้นฉันจึงลองเปลี่ยนแปลงบางอย่างเช่น:
- กำลังเปลี่ยน
QStyledItemDelegate
ถึงQItemDelegate
- เพิ่ม
painter->save()
และpainter->restore()
รอบการเรนเดอร์ - การตั้งค่าเรขาคณิตของวิดเจ็ตเป็นขนาดที่ใช้ได้
แต่ตอนนี้ฉันติดขัดนิดหน่อย ฉันค้นหาบนอินเทอร์เน็ตมาระยะหนึ่งแล้ว แต่ไม่พบตัวอย่างใด ๆ ที่ทำในสิ่งที่ฉันต้องการ พวกเขาล้วนพูดถึงวิดเจ็ตการแก้ไข (ซึ่งง่ายกว่ามาก) หรือการควบคุมการวาดแบบกำหนดเอง (อันที่กำหนดไว้ล่วงหน้า เช่น แถบความคืบหน้า) แต่ที่นี่ ฉันต้องการวิดเจ็ตแบบกำหนดเองที่ฉันสร้างขึ้นจริงๆ ซึ่งประกอบด้วยเลย์เอาต์ ป้ายกำกับ และ pixmap ขอบคุณสำหรับความช่วยเหลือของคุณ!
ฉันใช้ Qt 4.7.3 สำหรับ GCC บน Ubuntu 11.04