1

から CustomItemDelegate を作成しました。このメソッドをQStyledItemDelegate使用して、 .paint()QListView

項目をクリックしても が表示され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) を使用しています。

4

1 に答える 1

0

問題はデリゲート クラスにあり、editorEvent() 関数をうまく再実装しませんでした。そのセクションをコメントアウトしたところ、機能しました。

于 2013-07-18T11:45:17.327 に答える