0
QStyledItemDelegate
에서 CustomItemDelegate를 작성했으며 paint()
메소드를 사용하여 내 QListView
을보다 자세히 보여줍니다.QListView State_Selected에 대한 사용자 정의 ItemDelegate
항목을 클릭하면 option.state
에 State_Selected
이없는 이유는 무엇입니까?
선택 모델이 단일, 행이며 선택 사각형이 표시됩니다.
qDebug
는 이러한 출력합니다 :
QStyle::State("Active | Enabled")
QStyle::State("Active | Enabled | MouseOver")
void SyrupItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QRect rect = option.rect;
qDebug() << option.state;
if (option.state & QStyle::State_Selected)
{
painter->drawRoundedRect(option.rect,5,5);
painter->setPen(QPen(QPalette::HighlightedText));
if (option.state & QStyle::State_Active)
{
painter->setBrush(QBrush(QPalette().highlight()));
} else
{
//painter->setBrush(QBrush(QPalette().color(QPalette::Inactive,
//QPalette::Highlight)));
QLinearGradient gradient(0, 0, 0, 100);
gradient.setColorAt(0.0, QColor(0,0,230));
gradient.setColorAt(1.0, QColor(250,250,250));
painter->setBrush(gradient);
}
} else
painter->setPen(QPen(QPalette::Text));
if (!index.isValid())
return;
int row = index.row();
// painter->save();
// painter->setRenderHint(QPainter::Antialiasing,true);
QString res = index.sibling(row,SyrupsSQLModel::SYRUP_NM_COL_INDEX).data().toString();
QRectF rc(rect);
rc.setTop(rc.top()+ PADDING);
rc.setLeft(rc.left()+ 2* PADDING + IMG_WIDTH);
QFont font = option.font;
font.setPointSize(font.pointSize()+4);
painter->setFont(font);
painter->drawText(rc,res);
res = index.sibling(row,SyrupsSQLModel::SYRUP_GRP_COL_INDEX).data().toString().toLower();
rc.setTop(rect.top()+PADDING);
rc.setLeft(rect.left()+PADDING);
painter->drawPixmap(rc.topLeft(),QIcon(":/prodgrp/"+res).pixmap(QSize(IMG_WIDTH,IMG_HEIGHT)));
//SyrupsSQLModel::FORMULA_COL_INDEX:
//SyrupsSQLModel::SYRUP_ID_COL_INDEX:
//Painter->restore();
}
내가 Qt는 5.0.2 32 비트를 사용하고 있습니다 (승).
상품이 선택을 지원합니까? YourModel :: flags 메소드의 코드를 제공하십시오. –