한번 비슷한했습니다,리스트 뷰에이 대리자를 지정합니다. 이게 내가 한 일이야.
위임 클래스 선언. 보시다시피 QLabel * 레이블이 있습니다. 필요에 따라 다른 레이블이나 누름 단추를 추가 할 수 있습니다.
class MyItemDelegate : public QStyledItemDelegate
{
public:
explicit MyItemDelegate(QObject *parent = 0);
~MyItemDelegate();
protected:
void paint(QPainter *painter,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const;
private:
QLabel *label;
};
내 paint() 및 sizeHint() 메소드.
QSize MyItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(!index.isValid())
return QSize();
QVariant data = index.data(Qt::DisplayRole);
label->setText(data.toString());
label->resize(label->sizeHint());
QSize size(option.rect.width(), label->height());
return size;
}
void MyItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(!index.isValid())
return;
QVariant data = index.data(Qt::DisplayRole);
// Not necessary to do it here, as it's been already done in sizeHint(), but anyway.
label->setText(data.toString());
painter->save();
QRect rect = option.rect;
// This will draw a label for you. You can draw a pushbutton the same way.
label->render(painter, QPoint(rect.topLeft().x(), rect.center().y() - label->height()/2),
QRegion(label->rect()), QWidget::RenderFlags());
painter->restore();
}
희망이 당신이 찾고있는 것입니다. 행운을 빕니다!
이것은 내가 찾고 있었던 것입니다! 고맙습니다! – Gerstmann