Russian Qt Forum
Май 03, 2024, 11:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Цветовое оформление выделенной строки в QTableView  (Прочитано 17260 раз)
water
Гость
« Ответ #15 : Декабрь 05, 2012, 14:57 »

Я выделяю строку в зависимости от значения в колонке следющим способом

//Header file
class myModel : public QSqlQueryModel
{
    Q_OBJECT
public:
    QVariant data(const QModelIndex &index,
                          int role = Qt::DisplayRole) const;

};

//source file
QVariant myModel::data(const QModelIndex &index,int role) const {
    QVariant value = QSqlQueryModel::data(index, role);

if (role==Qt::BackgroundColorRole){
       QModelIndex controlIndex ;
       controlIndex= index.sibling(index.row(), 6);// второй параметр это проверяемая колонка
       if (controlIndex.data(Qt::DisplayRole).toString()==QObject::trUtf8("Да"))
           return QColor(55,175,189) ; //Подсвечиваю всю строку
       return value;
    }

}


Ну а далее создаешь объект этого класса и работаешь с ним как с обычным объектом QSqlQueryModel
Записан
radislav72
Гость
« Ответ #16 : Декабрь 06, 2012, 12:13 »

Bepec
Спасибо, идею понял

water
А что делает index.sibling ? Что-то адекватно перевести с английского не смог... Создает дубликат индекса? Если да, то зачем?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #17 : Декабрь 06, 2012, 12:45 »

sibling — сосед, «брат»
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
radislav72
Гость
« Ответ #18 : Декабрь 06, 2012, 12:55 »

Я понимаю, что по-английски sibling- "родной брат/сестра", мне не понятно, что делает метод sibling
Записан
radislav72
Гость
« Ответ #19 : Декабрь 06, 2012, 13:06 »

water
Так можно подсветить невыделенную строку, но стандартное выделение "перекрывает" то что прописать таким образом в коде, потому для выделения нужен другой способ
Записан
evgeniy
Гость
« Ответ #20 : Август 05, 2014, 21:28 »

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));
« Последнее редактирование: Август 06, 2014, 13:37 от evgeniy » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.107 секунд. Запросов: 23.