0

QTableViewセルを3D クリック可能なボタンのように見せようとしています。セルをクリックすると、ボタンが押されたように見えます。私は単に色を変えたいだけで、通常のボタンと押されたボタンのイメージを 3 次元で表示する必要があると誰もが考えているようです。

これは、クリックされたときにセルの背景を変更QTableView::setItemDelegate()する適切なを呼び出して、すでに行っています。ItemDelegateただし、セルに含まれるデータに基づいて、一部のセルを異なる色のボタンにしたいので、この時点で立ち往生しています。したがって、数字の小さいセルは赤いボタンになり、クリックすると赤くなり、他のセルは異なる色になります。

でボタンの色を設定できTableModelますが、ボタンがクリックItemDelegateされると、他の色とは異なる色であることを が認識する方法がありません。2 つをどのようにリンクして、ItemDelegate本来の色を認識できるでしょうか?

また、セルをボタンのように見せるためのより良い方法はありますか?

4

7 に答える 7

1

パラメータがあるため、のメソッドQModelIndex::model()内から呼び出すことができます。これにより、データのが得られ、セルのボタンの色をプログラムで決定できます。ItemDelegatepaint()QModelIndexTableModel

しかし、これはまだ私が望むほどエレガントではありません。上ボタンと下ボタンの両方のプッシュ状態でテーブルセルの外観を変更するためのより良い方法を知っている人はいますか?

于 2009-06-09T15:17:09.157 に答える
1

インデックスに背景色を尋ねてみませんか。

このようなもの ...

QStyleOptionToolButton buttonOption;
const QStyleOptionViewItemV4& optionV4 = dynamic_cast<QStyleOptionViewItemV4&>(option);
//...
buttonOption.palette.setBrush( QPalette::Button, index.data( Qt::BackgroundColorRole ) ); 
//...

私はそれがQtのバグであると感じています.

// model code  
if(role==Qt::BackgroundColorRole )
    return qvariant_cast<QBrush>( QBrush(Qt::red) );

// delegate code 
buttonOption.palette.setBrush(QPalette::Button, optionV4.backgroundBrush );

optionV4.backgroundBrush はメソッドでは正しいが、sizeHintメソッドでは無効であるためpaintです。sizeHintバックグラウンド ブラシを使用し、paintメソッドを使用しない理由がわかりました。ノキアに報告します。

EDIT:

私が正しかったように見えます.Qt4.5未満のバグです。
QStyleOptionViewItemV4 はアイコンと backgroundBrush をコピーしません

于 2009-06-10T11:27:25.660 に答える
0

これを行う方法は、paintメソッドで取得したQModelIndexオブジェクトのデータメソッドを使用して、特定の役割を要求することです(カスタムモデルを定義する場合は、独自の役割を追加して、必要な情報を提供できます)それらの役割の代表者。)

TimW、前にinitStyleOptionを呼び出して、QStyleOptionViewItemV4情報を入力する必要があると思います。

于 2009-06-18T13:20:33.597 に答える
0

背景色にデータロールを割り当て、アイテムデリゲートで、モデルインデックスに背景色を尋ねます(使用data( bg_color_role )または類似のもの)。bg_color_role次に、モデルで、データ関数がモデル化されるデータに適した色を返すことを確認する必要があります。

于 2009-06-09T17:51:26.137 に答える
0

背景画像の要件がどこから来たのかわかりません。セルを のように見せたい場合はQPushButton、おそらく から継承しQItemDelegateて実装し、次のように描画するpaint()ために使用する必要があります。QStyleQPushButton

QStyleOptionButton opt;
// fill 'opt' from the information from the model, and the style option that's passed in
style()->drawControl( QStyle::CE_PushButton, &opt, painter );
于 2009-07-26T10:21:04.503 に答える
0

テーブル セルの行の ID/行数を取得して、それをカラー テーブルと照合し、それに応じて色を設定することはできませんか? あなたの質問をよく理解できたかどうかわかりません。

于 2009-06-09T15:08:26.337 に答える
0

カスタム スタイル シートを使用してみましたか。

同じスタイルシートをすべてのセルに適用し、背景画像/スタイルを変更して、選択されているかどうかに応じて 3D ボタン画像を描画することができます。

于 2012-09-18T12:35:57.997 に答える