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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: выделить жирным некоторые строчки таблицы  (Прочитано 4723 раз)
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;
        }
 
В итоге получаются краказябры.. Что я делаю не так? Вроде на форуме писали такое решение
Записан
ddrtn
Гость
« Ответ #1 : Декабрь 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
Записан
chester
Гость
« Ответ #2 : Декабрь 20, 2011, 08:52 »

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

Пробую Ваш код, но выдается ошибка, что не может преобразовать QVariant в QFont
Записан
ddrtn
Гость
« Ответ #3 : Декабрь 20, 2011, 09:03 »

QParentModel::data(index, role).value<QFont>();
Записан
ddrtn
Гость
« Ответ #4 : Декабрь 20, 2011, 09:08 »

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

QParentModel::data(index, role).value<QFont>();

Спасибо ... только вот все-равно краказябры получаются ((
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Декабрь 20, 2011, 09:45 »

2ddrtn: не нужно запрашивать значение из базового класса 2 раза - в самом начале же уже написано получение значения из QSqlQueryModel. и использование this в данном случае абсолютно нормально - значение для тултипной роли (второй параметр, число 3) будет взято из базового класса.
В итоге получаются краказябры..
твой код правильный, но как-то подозрительно, что жирность шрифта влияет на сам шрифт... а без жирности отображается нормально? или может используемый шрифт просто не умеет показывать жирным? попробуй для теста курсивом выделить.
Записан

Изучением 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
chester
Гость
« Ответ #7 : Декабрь 20, 2011, 10:00 »

твой код правильный, но как-то подозрительно, что жирность шрифта влияет на сам шрифт... а без жирности отображается нормально? или может используемый шрифт просто не умеет показывать жирным? попробуй для теста курсивом выделить.
Без выделения все нормально. А при выделении строчка выделяется, но с краказябрами
Записан
andrew.k
Гость
« Ответ #8 : Декабрь 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.

Сейчас последствий нет, т.к. в обоих кейзах одинаковое условие.
« Последнее редактирование: Декабрь 20, 2011, 10:45 от andrew.k » Записан
ddrtn
Гость
« Ответ #9 : Декабрь 20, 2011, 10:57 »

твой код правильный, но как-то подозрительно, что жирность шрифта влияет на сам шрифт... а без жирности отображается нормально? или может используемый шрифт просто не умеет показывать жирным? попробуй для теста курсивом выделить.

Жирность не влияет. Просто при возврате QFont::Bold Возвращается шрифт, который создается заново. с настройками по умолчанию кроме свойства weight.
Записан
ddrtn
Гость
« Ответ #10 : Декабрь 20, 2011, 11:03 »

2kambala
2-й параметр 3 - это номер столбца. а роль там будет Qt::DisplayRole.
а про то, что сначала получено value не обратил внимание, сорри.
Записан
chester
Гость
« Ответ #11 : Декабрь 20, 2011, 11:47 »

Спасибо большое, ddrtn, все нормально рабтает ... по началу я ступил просто ))))

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

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

Спасибо за замечание....
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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