Russian Qt Forum

Qt => Вопросы новичков => Тема начата: chester от Декабрь 20, 2011, 08:25



Название: выделить жирным некоторые строчки таблицы
Отправлено: chester от Декабрь 20, 2011, 08:25
Добрый день!!!
Хочу некоторые строчки выделить жирным. Перегружаю метод data() в модели, но не получается (((
Вот так делаю
Код
C++ (Qt)
QVariant data(const QModelIndex &index,int role = Qt::DisplayRole) const{
           QVariant value = QSqlQueryModel::data(index, role);
           switch (role){
              case Qt::BackgroundRole:
               if(this->data(this->index(index.row(),3)).toInt() == 1)
                     return QColor(212,208,200,225);
              case Qt::FontRole:
                if(this->data(this->index(index.row(),3)).toInt() == 1)
                     return QFont::Bold;
            }
            return value;
        }
 
В итоге получаются краказябры.. Что я делаю не так? Вроде на форуме писали такое решение


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: ddrtn от Декабрь 20, 2011, 08:44
Код:
Variant data(const QModelIndex &index,int role = Qt::DisplayRole) const{
            QVariant value = QSqlQueryModel::data(index, role);
            switch (role){
               case Qt::BackgroundRole:
                if(this->data(this->index(index.row(),3)).toInt() == 1)
                      return QColor(212,208,200,225);
               case Qt::FontRole:
                 if(this->data(this->index(index.row(),3)).toInt() == 1)
                 {
                      QFont font = QParentModel::data(index, role);// QParentModel - имя суперкласса модели;
                      font.setWeight (QFont::Bold);
                      return font;
                  }
             }
             return value;
         }


А вообще, терзают меня смутные сомнения на счет кода. а конкретно this->data, this->index


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: chester от Декабрь 20, 2011, 08:52
Спасибо за ответ
А вообще, терзают меня смутные сомнения на счет кода. а конкретно this->data, this->index
надо без this их использовать да?

Пробую Ваш код, но выдается ошибка, что не может преобразовать QVariant в QFont


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: ddrtn от Декабрь 20, 2011, 09:03
QParentModel::data(index, role).value<QFont>();


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: ddrtn от Декабрь 20, 2011, 09:08
А вообще без this.
Но при вызове data будет вызываться эта же функция. так что нужно контролировать рекурсивный выход или вызывать Q<ParentModel>::data. Более того. если вызывать index.data() или index().data(), то будет вызываться эта же функция data().


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: chester от Декабрь 20, 2011, 09:11
QParentModel::data(index, role).value<QFont>();

Спасибо ... только вот все-равно краказябры получаются ((


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: kambala от Декабрь 20, 2011, 09:45
2ddrtn: не нужно запрашивать значение из базового класса 2 раза - в самом начале же уже написано получение значения из QSqlQueryModel. и использование this в данном случае абсолютно нормально - значение для тултипной роли (второй параметр, число 3) будет взято из базового класса.
В итоге получаются краказябры..
твой код правильный, но как-то подозрительно, что жирность шрифта влияет на сам шрифт... а без жирности отображается нормально? или может используемый шрифт просто не умеет показывать жирным? попробуй для теста курсивом выделить.


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: chester от Декабрь 20, 2011, 10:00
твой код правильный, но как-то подозрительно, что жирность шрифта влияет на сам шрифт... а без жирности отображается нормально? или может используемый шрифт просто не умеет показывать жирным? попробуй для теста курсивом выделить.
Без выделения все нормально. А при выделении строчка выделяется, но с краказябрами


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: andrew.k от Декабрь 20, 2011, 10:44
Это не поможет, но все-таки:
Код
C++ (Qt)
              case Qt::BackgroundRole:
               if(this->data(this->index(index.row(),3)).toInt() == 1)
                     return QColor(212,208,200,225);
              case Qt::FontRole:
Нужно добавить break; так как return все-таки под условием, и может проходить дальше.
И на BackgroundRole будет возвращаться FontRole.

Сейчас последствий нет, т.к. в обоих кейзах одинаковое условие.


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: ddrtn от Декабрь 20, 2011, 10:57
твой код правильный, но как-то подозрительно, что жирность шрифта влияет на сам шрифт... а без жирности отображается нормально? или может используемый шрифт просто не умеет показывать жирным? попробуй для теста курсивом выделить.

Жирность не влияет. Просто при возврате QFont::Bold Возвращается шрифт, который создается заново. с настройками по умолчанию кроме свойства weight.


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: ddrtn от Декабрь 20, 2011, 11:03
2kambala
2-й параметр 3 - это номер столбца. а роль там будет Qt::DisplayRole.
а про то, что сначала получено value не обратил внимание, сорри.


Название: Re: выделить жирным некоторые строчки таблицы
Отправлено: chester от Декабрь 20, 2011, 11:47
Спасибо большое, ddrtn, все нормально рабтает ... по началу я ступил просто ))))

Нужно добавить break; так как return все-таки под условием, и может проходить дальше.
И на BackgroundRole будет возвращаться FontRole.

Сейчас последствий нет, т.к. в обоих кейзах одинаковое условие.

Спасибо за замечание....