crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QTableView: Как задать цвет фона для одной секции заголовка?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Steklova Olga Дата 12.3.2013, 17:25
 
Цитата(lanz @ 12.3.2013, 16:54) *
Либо делать свой стиль под все приложение,
либо свой paintEvent,
либо перегрузить какой нибудь один стиль, чтобы он правильно рисовал хедеры, и использовать только его.
Честно скажу, я не умею это делать.

А вот QMotifStyle только для заголовков таблиц очень даже сойдет :D
lanz Дата 12.3.2013, 16:54
 
Цитата
Будет коряво выглядеть.

Норм! :lol:

И потом - выбор невелик. Либо делать свой стиль под все приложение, либо свой paintEvent, который будет все равно корявый, так как оторван от всех стилей.
EDIT: Либо перегрузить какой нибудь один стиль, чтобы он правильно рисовал хедеры и использовать только его.
wiz29 Дата 12.3.2013, 16:48
 
Цитата(RazrFalcon @ 12.3.2013, 17:35) *
Если верить гуглу - то это не возможно...


Судя по исходникам версии 4.8.4, вы абсолютно правы. Без переопределения функции рисования, этого не добиться со стандартными представлениями.


Цитата(lanz @ 12.3.2013, 17:43) *
Это проблема дефолтного стиля.
Например если сделать так
view->verticalHeader ()->setStyle (new QMotifStyle);

то все в порядке.

Не очень спортивно конечно, зато дешево и сердито :lol:

QMotifStyle вряд ли спасет, если приложение использует другой стиль. Будет коряво выглядеть.
lanz Дата 12.3.2013, 16:43
  Это проблема дефолтного стиля.
Например если сделать так
view->verticalHeader ()->setStyle (new QMotifStyle);

то все в порядке.

Не очень спортивно конечно, зато дешево и сердито :lol:
RazrFalcon Дата 12.3.2013, 16:35
  Если верить гуглу - то это не возможно.
Даже тут уже бы подобный вопрос: http://www.forum.crossplatform.ru/index.php?showtopic=5440

Разве что попробовать еще переписать paintEvent у QHeaderView.

https://bugreports.qt-project.org/browse/QTBUG-2474
Steklova Olga Дата 12.3.2013, 15:44
  lanz, у меня не работает то, что вы предлагаете... Вот мой код.
#ifndef MYMODEL_H
#define MYMODEL_H

#include <QSqlTableModel>

class MyModel : public QSqlTableModel
{
    Q_OBJECT
public:
    MyModel(QObject *parent = 0);
    QVariant data(const QModelIndex &index,
                  int role = Qt::DisplayRole) const;
    QVariant headerData(int section,
                        Qt::Orientation orientation,
                        int role = Qt::DisplayRole) const;
};

#endif // MYMODEL_H


#include <QtSql>
#include "mymodel.h"

MyModel::MyModel(QObject *parent) :
    QSqlTableModel(parent)
{
}

QVariant MyModel::data(
        const QModelIndex &index, int role) const 
{
    QVariant value = QSqlTableModel::data(index, role);
    switch (role) {
    case Qt::BackgroundRole:
        if (index.column() == 3)
            return QBrush(Qt::green); //ЭТО РАБОТАЕТ
        else
            return value;
    }
    return value;
}

QVariant MyModel::headerData(
        int section, Qt::Orientation orientation, int role) const 
{
    QVariant value = QSqlTableModel::headerData(section, orientation, role);
    switch (role) {
    case Qt::BackgroundRole:
        if (section == 2)
            return QBrush(Qt::green); //А ЭТО НЕ РАБОТАЕТ
        else
            return value;
    }
    return value;
}

lanz Дата 12.3.2013, 13:53
  Можно переопределить в модели headerData, чтобы он в ответ на Qt::BackgroundRole, возвращал нужный QBrush.
Например:
class CustomModel : public QSqlTableModel {
    public:
        virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const {            
            if (role == Qt::BackgroundRole) {
                QVariant value;
                if (section == 42)
                    value.setValue (QBrush(Qt::blue));
                else
                    value.setValue (QBrush(Qt::red));
                return value;
            };
            return QSqlTableModel::headerData (section, orientation, role);
        };
};
Steklova Olga Дата 12.3.2013, 13:34
  Здравствуйте :)
Чтобы задать одинаковый цвет фона для всех секций заголовка делаю так:
myModel = new QSqlTableModel(this);
myModel->setTable("T1");

myView = new QTableView();
myView->setModel(myModel);
myView->verticalHeader()->hide();

myView->setStyleSheet("QHeaderView::section { background-color:green }");

Подскажите, пожалуйста, как задать для n-й секции заголовка один цвет, а для остальных - другой?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 23.7.2025, 6:03