Таблица стилей AFAIK не является панацеей от всего. Вам нужна очень конкретная вещь, поэтому вы должны смотреть глубже и использовать что-то более мощное. Я предлагаю вам использовать делегат. Вы не указали спецификацию, поэтому я предоставляю основную идею. В QStyledItemDelegate
подкласс reimplement paint
. Например:
void ItemDelegatePaint::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QString txt = index.model()->data(index, Qt::DisplayRole).toString();
if(option.state & QStyle::State_Selected)//it is your selection
{
if(index.row()%2)//here we try to see is it a specific item
painter->fillRect(option.rect,Qt::green);//special color
else
painter->fillRect(option.rect, option.palette.highlight());
painter->drawText(option.rect,txt);//text of item
} else
if(option.state & QStyle::State_MouseOver)//it is your hover
{
if(index.row()%2)
painter->fillRect(option.rect,Qt::yellow);
else
painter->fillRect(option.rect, Qt::transparent);
painter->drawText(option.rect,txt);
}
else
{
QStyledItemDelegate::paint(painter,option,index);//standard process
}
}
Здесь я устанавливаю определенные свойства для каждого второго элемента, но вы можете использовать другие конкретные элементы.
QTreeWidget
Inherits QTreeView
так использовать:
ui->treeWidget->setItemDelegate(new ItemDelegatePaint);
кажется, что ваш виджет является сложным, поэтому я надеюсь, что вы понимаете основную идею, и вы будете иметь возможность написать делегат, который будет абсолютно подходит для вас. Если раньше вы не работали с делегатами, проверьте примеры, это не очень сложно.
http://qt-project.org/doc/qt-4.8/itemviews-stardelegate-stardelegate-h.html
http://qt-project.org/doc/qt-4.8/itemviews-stardelegate-stardelegate-cpp.html
В моем ответе я использовал следующий делегат:
#ifndef ITEMDELEGATEPAINT_H
#define ITEMDELEGATEPAINT_H
#include <QStyledItemDelegate>
class ItemDelegatePaint : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit ItemDelegatePaint(QObject *parent = 0);
ItemDelegatePaint(const QString &txt, QObject *parent = 0);
protected:
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const;
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget * editor, const QModelIndex & index) const;
void setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const;
void updateEditorGeometry(QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index) const;
signals:
public slots:
};
#endif // ITEMDELEGATEPAINT_H
Есть много методов здесь, но paint
является наиболее важным для вас.
Спасибо, это помогло! –