2013-07-18 4 views
0

QStyledItemDelegate에서 CustomItemDelegate를 작성했으며 paint() 메소드를 사용하여 내 QListView을보다 자세히 보여줍니다.QListView State_Selected에 대한 사용자 정의 ItemDelegate

항목을 클릭하면 option.stateState_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 비트를 사용하고 있습니다 (승).

+0

상품이 선택을 지원합니까? YourModel :: flags 메소드의 코드를 제공하십시오. –

답변

0

위임 클래스에서 문제가 발생했습니다. editorEvent() 함수를 잘못 구현했습니다. 나는 그 섹션을 주석 처리하고 작동합니다.