1

さまざまな方法で行の境界線を作成しようとしていQTableWidgetますが、すべてのソリューションが私の要件に対応していません。私が望むのは、行全体の周りに長方形を描くことだけです。クラスを試してみましQStyledItemDelegateたが、それは私のやり方ではありません。デリゲートは、行または列全体ではなく、項目 [ 行、列 ] にのみ使用されるためです。

ここに間違った解決策があります:

/// @brief Рисуем границу вокруг строки. 
class DrawBorderDelegate : public QStyledItemDelegate
{
public:
     DrawBorderDelegate( QObject* parent = 0 ) : QStyledItemDelegate( parent ) {}
     void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const;

}; // DrawBorderDelegate

void DrawBorderDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
     QStyleOptionViewItem opt = option;

     painter->drawRect( opt.rect );

     QStyledItemDelegate::paint( painter, opt, index );  
}

そしてコードのどこかに:

tableWidget->setItemDelegateForRow( row, new DrawBorderDelegate( this ) );

手伝ってくれてありがとう!

4

2 に答える 2

7

あなたの解決策はそれほど間違っていませんでした。描画する長方形のエッジをもう少し選択する必要があります。

void DrawBorderDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
     const QRect rect( option.rect );

     painter->drawLine( rect.topLeft(), rect.topRight() );
     painter->drawLine( rect.bottomLeft(), rect.bottomRight() );

     // Draw left edge of left-most cell
     if ( index.column() == 0 )
         painter->drawLine( rect.topLeft(), rect.bottomLeft() );

     // Draw right edge of right-most cell
     if ( index.column() == index.model()->columnCount() - 1 )
         painter->drawLine( rect.topRight(), rect.bottomRight() );

     QStyledItemDelegate::paint( painter, option, index );
}

お役に立てれば!

于 2011-09-14T20:30:36.903 に答える