5

素敵な水平ヘッダーを持つサブクラス (およびサブクラス) がありますQTreeViewQAbstractItemModel一致する垂直ヘッダー (左側に下に行く) を追加したいと思います。ただし、垂直ヘッダー ( ) と水平ヘッダー ( )がQTableView別々になっているのとは異なり、単一のヘッダー ( ) しか使用できません。setVerticalHeader()setHorizontalHeader()QTreeViewsetHeader()

左端の列がヘッダーであるふりをして、別の背景色でレンダリングできることはわかっています (行のサイズを変更したり再配置したりする必要はないため、これらの特別な動作を実装する必要はありません)。 )。しかし、それはローカル スタイルを考慮していません。たとえば、私のシステムでは、ヘッダーにわずかなグラデーションがあり、ほぼ 3D の外観になっています。

したがって、適切な垂直ヘッダーを追加する方法を探しています (のサブクラスになると思いますQHeaderView) か、ヘッダーを左端の列にレンダリングしますが、正しい方法でレンダリングします。

4

1 に答える 1

3

「ふりをする」必要があるのはおそらく正しいですが、水平ヘッダーと同じくらい見栄えがするように描画できるはずです。

あなたがする必要があるのはpaintEvent、それらのセルを担当し、現在のスタイルを使用してカスタム コントロールを描画することです。何かのようなもの:

//QWidget* w is the widget who's style you want
QPainter painter(this);
QStyleOptionHeader opt;
opt.initFrom(this);
opt.state = QStyle::State_None;
opt.orientation = Qt::Vertical;
opt.state |= QStyle::State_Vertical;
if (w->isEnabled())
    opt.state |= QStyle::State_Enabled;
opt.state |= QStyle::State_Active;
w->style()->drawControl(QStyle::CE_Header, &opt, &painter, w);

必要なセルのペイント イベントを担当する最も簡単な方法は、カスタム アイテム デリゲートを作成し、virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0メソッドを再実装することです。関心のあるインデックスにペイントをゲートし、残りをスーパー クラスに渡すだけです (このクラスについては、Qt のドキュメントを参照してください)。

于 2009-12-29T14:51:56.220 に答える