2013-07-18 11 views
0

Я создал CustomItemDelegate от QStyledItemDelegate, и я использую метод paint(), чтобы лучше посмотреть на мой QListView.Пользовательский ItemDelegate для QListView State_Selected

Если я нажму на элемент, 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 32bit (Win).

+0

Поддерживаются ли ваши варианты подбора? Предоставьте код метода MyModel :: flags. –

ответ

0

Проблема была в классе делегата. Я неправильно реализовал функцию editorEvent(). Я прокомментировал, что разделы и это работает.