2

選択したセルの背景色を変更したい。デフォルトでは、選択したセルには細い下線のみが表示されます。

私はこれを試しました:

table->setStyleSheet("QTableView {selection-background-color: #0000FF; selection-color: #00FF00;}

ただし、ポインターがセル上にあるときに表示される色のみを変更します。table->selectRow(selRow)ポインタが離れた後、下線だけでセルを選択します。おそらく、他のプラットフォームでは異なるように見えます。

同じトピックのスレッドがたくさんありますが、ほとんどの答えは上記のスタイルシートを使用しています。何も機能せず、「moseover Color」のみが変更されます。

前もって感謝します, よろしくマティアス

4

4 に答える 4

2

これが私がしたことです。

stylesheet =  "QTableView{selection-background-color: " + highlight + ";"
stylesheet +=     "selection-color: white; show-decoration-selected: 10}\n"
stylesheet += "QTableView::item:focus{border: 1px solid yellow;"
stylesheet +=     "background-color:"+highlight+"}"

table->setStyleSheet(stylesheet);

選択色は選択された 1 つの項目を示し、項目フォーカスは強調表示されるべき残りの項目を色付けします。

これは、選択された行を持つように、選択されたセルに対して機能します。「マウス オーバー」が必要な場合は、スタイル シートで「ホバー」を使用する必要がある場合があります。これがあなたにアイデアを与えることを願っています。

于 2014-08-06T12:18:18.190 に答える
2
class BackgroundDelegate : public QStyledItemDelegate {
public:
  explicit BackgroundDelegate(QObject *parent = 0)
      : QStyledItemDelegate(parent){}
  void paint(QPainter *painter, const QStyleOptionViewItem &option,
             const QModelIndex &index) const {
    // Fill the background before calling the base class paint
    // otherwise selected cells would have a white background
    QVariant background = index.data(Qt::BackgroundRole);
    if (background.canConvert<QBrush>())
        painter->fillRect(option.rect, background.value<QBrush>());
    // the comment below makes selection transparent
    //QStyledItemDelegate::paint(painter, option, index);
    // To draw a border on selected cells
    if(option.state & QStyle::State_Selected) {
        painter->save();
        QPen pen(Qt::black, 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
        int w = pen.width()/2;
        painter->setPen(pen);
        painter->drawRect(option.rect.adjusted(w,w,-w,-w));
        painter->restore();
    }
  }
};

それから table->setItemDelegateForColumn(2, new BackgroundDelegate(this));

于 2014-08-06T10:33:58.447 に答える
1
table->setStyleSheet("QTableView:item:selected {background-color: #XXYYZZ; color: #FFFFFF}\n"
                     "QTableView:item:selected:focus {background-color: #3399FF;}")

残念ながら、「nofocus」プロパティはないようです。そのため、選択したすべてのアイテムの色を設定してから、フォーカスされた色をデフォルトに戻す必要があります。#3399FFカラーピッカーがデフォルトのハイライトの背景色が私のセットアップ用であることを明らかにしたので、それを使用しました. お好きな色で代用できます。

color: #FFFFFF、選択範囲がフォーカスを失ったときにテキストの色をカスタムに設定します。フォーカスがあるときは白なので、フォーカスを失ったときはそのまま白のままにします。好きな色を使用することも、その部分を削除してデフォルトを使用することもできます。

于 2016-05-17T22:05:42.770 に答える
0

カスタムデリゲートを使用して、選択したセルを必要に応じてペイントする必要があります。

QAbstractItemView::setItemDelegate()メソッドとQItemDelegateクラスを見てください。QItemDelegate::paint()メソッドをオーバーライドする必要があります。ペイントメソッドはQStyleOptionViewItem構造を取ります。これを使用して、ペイントするように求められているアイテムが選択されているかどうかを判断できます。

のQtドキュメントにQItemDelegate::paintは、まさにそれを行うサンプルコードがあります。

于 2011-04-09T05:34:38.510 に答える