Название: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 04, 2012, 12:34 Как изменить для одного QtableView параметры выделения строки/ячейки? По умолчанию используется синий фон и белые буквы. Как задать свой цвет фона и шрифта?
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: carrygun от Декабрь 04, 2012, 13:04 Поменять именно этому QTableView его QSS.
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 04, 2012, 14:55 А что задать в QSS?
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: Bepec от Декабрь 04, 2012, 15:02 задать свой цвет фона и шрифта.
Qt Assistant -> find -> Qt Style Sheet Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 04, 2012, 16:56 Спасибо, разобрался, но немного не подходит- нужно для разных столбцов по-разному задавать цвет выделения.
Можно ли как-то в коде ето обрабатывать? Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: Bepec от Декабрь 04, 2012, 17:34 Отдавать role каждому столбцу. По идее должно прокатить. В функции data модели.
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 04, 2012, 18:36 Может, я не правильно понял... Что значит "отдавать role"?
Я в data как раз и обрабатываю каждый столбец отдельно. И сами столбцы- разноцветные, как и должно быть. Но выделение рисуется отдельно от моего кода, и всегда получается белым текстом на синем фоне. А нужно для некоторых столбцов хотя бы цвет текста изменять. То-есть получается так: (http://fotky.com.ua/users/1712/121204/jjqmr_large.jpg) (http://fotky.com.ua/view/full/128394_lkohu) В последних зеленых колонках некоторые значения (текст) выделены другим цветом. Нужно, чтобы на выделении также было видно другой цвет. Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: water от Декабрь 04, 2012, 18:45 Попробй с помощью CSS:
//Задание стиля для активной ячейки ui->tableView->setStyleSheet( "QTableView::item:selected:active {" "background: rgb(191, 255,191);" "border: 1px solid transparent;" "selection-color: #f00;" "}" "QTableView::item:selected:!active {" "background: rgb(191, 255,191);" "border: 1px solid transparent;" "selection-color: #f00;" "}" ); Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 04, 2012, 19:36 Цитировать water Да, так можно сделать...Но хотелось бы вариант в коде, так как нужно анализировать данные в строке выделения, и выделять в зависимости от данных- по-разному. Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: kambala от Декабрь 04, 2012, 21:03 model.setData()
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 05, 2012, 08:20 Цитировать model.setData() А как из модели узнать, какая строка в данный момент выделена (должна быть выделена)? Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: carrygun от Декабрь 05, 2012, 09:03 Цитировать model.setData() А как из модели узнать, какая строка в данный момент выделена (должна быть выделена)? Об этом должна знать вьюха: QAbstractItemView::currentIndex. Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 05, 2012, 09:25 Как-то не очень хорошо из модели делать ссылку на представление... Но другого пути вроде нет?
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: carrygun от Декабрь 05, 2012, 10:09 Возможно, стоит посмотреть в сторону QStyledItemDelegate::paint? Может поможет.
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: Bepec от Декабрь 05, 2012, 12:27 Зачем вам ссылка на представление? Сделайте в своей модели слот, который и будет получать номер выделенной строки.
Всё. Никакой привязки к View не будет. Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: water от Декабрь 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 Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 06, 2012, 12:13 Bepec
Спасибо, идею понял water А что делает index.sibling ? Что-то адекватно перевести с английского не смог... Создает дубликат индекса? Если да, то зачем? Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: kambala от Декабрь 06, 2012, 12:45 sibling — сосед, «брат»
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 06, 2012, 12:55 Я понимаю, что по-английски sibling- "родной брат/сестра", мне не понятно, что делает метод sibling
Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: radislav72 от Декабрь 06, 2012, 13:06 water
Так можно подсветить невыделенную строку, но стандартное выделение "перекрывает" то что прописать таким образом в коде, потому для выделения нужен другой способ Название: Re: Цветовое оформление выделенной строки в QTableView Отправлено: evgeniy от Август 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)); |