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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeView/Widget and CSS  (Прочитано 3727 раз)
carhun
Гость
« : Июль 12, 2012, 21:41 »

Добрый день.

Хотел бы, что бы в QTreeView/Widget'e в первом столбике рисовался поверха текста кружочек, соотв. для этого я так понимаю мне нужно использовать CSS. Делаю так:
Код:
 QTreeView::item {
    width: 100px;
    height: 100px;
    background: red;
    -moz-border-radius: 50px;
    -webkit-border-radius: 50px;
    border-radius: 50px;
 }

Соотв. этот CSS рисует для всех колонок, как можно сделать, что бы оно рисовало кружек только для одной колонки?

Прилагаю ui файл для дизайнера для теста ...

Спасибо за внимание.
Записан
andrew.k
Гость
« Ответ #1 : Июль 12, 2012, 23:47 »

QItemDelegate или QStyleItemDelegate
Записан
carhun
Гость
« Ответ #2 : Июль 13, 2012, 09:49 »

Добрый день!

А сам допустим кружочек я так понимаю могу сделать только используя CSS или есть еще какой-то способ?
Делагат, я так понял мне нужн только для того, что бы сделать, что бы этот кружок рисовался в первом столбике?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Июль 13, 2012, 09:51 »

В делегате ты можешь рисовать все, что тебе хочется.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
carhun
Гость
« Ответ #4 : Июль 13, 2012, 10:44 »

Т.е. рисовать вот эти дуги, к-ые я прилагаю в файлике, это все можно сделать в делигате? или тут надо что-то вида:
Код:
 QTreeView::branch:has-siblings:!adjoins-item {
     border-image: url(stylesheet-vline.png) 0;
 }

 QTreeView::branch:has-siblings:adjoins-item {
     border-image: url(stylesheet-branch-more.png) 0;
 }

 QTreeView::branch:!has-children:!has-siblings:adjoins-item {
     border-image: url(stylesheet-branch-end.png) 0;
 }

 QTreeView::branch:has-children:!has-siblings:closed,
 QTreeView::branch:closed:has-children:has-siblings {
         border-image: none;
         image: url(stylesheet-branch-closed.png);
 }

 QTreeView::branch:open:has-children:!has-siblings,
 QTreeView::branch:open:has-children:has-siblings  {
         border-image: none;
         image: url(stylesheet-branch-open.png);
 }
Если да, то спасибо за помощь и я пошел разбираться с делегатами...

Просто я пытаюсь в делигате делать вот так:
Код:
void Delegate::drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const
{
    QPixmap pix(100, 100);

    pix.fill(Qt::red);
    QItemDelegate::drawDecoration(painter, option, option.rect, pix);
}
Так тогда получается то он рисуется только для одной строчки и когда я раскрою дерево, то оно автоматом не нарисует , т.к. я нарисовал на картинке...
« Последнее редактирование: Июль 13, 2012, 11:32 от carhun » Записан
andrew.k
Гость
« Ответ #5 : Июль 13, 2012, 13:44 »

Делегат - это механизм рисования ячейки (в твоем случае).
Когда вьюхе необходимо отрисовать ячейку (любую), она обращается к делегату.
А уже твой делегат может решать как рисовать ту или иную ячейку, т.к. у него есть ее индекс.
Ты можешь вообще все ячейки рисовать по-разному.
Записан
carhun
Гость
« Ответ #6 : Июль 13, 2012, 15:31 »

Смотрите, значит сделал пока, что так:

Код:
void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    painter->drawRect(option.rect);

    QItemDelegate::paint(painter, option, index);
}

и тогда как видно на рисунке, получается что вот для первой строки, когда я раскрываю он полностью до конца не дорисовывает прямоугольник...
Для того, что он дорисовал надо ему самому сказать, что option.rect.setBottomLeft(QPoint(x1,y1)) ? Если да, то тогда получается мне надо узнать если ли у моей первой строки child'ы - это я так понимаю можно сделать исходя из индекса, но как тогда исходя из индекса узнать сколько места он занимает? Ведь получается мне надо взять, у первой строки пройтись по child'м, и когда дошел до последнего взять его координаты конца и соотв. уставноить y1 = y посл. child'a?
Тогда он нарисует все правильно, как я до этого рисовал на картинке...

Значит скажу почему мне сразу надо знать высоту прямоугольника, в к-ом находится строка... Это мне нужно потому, что у меня во 2м столбце может находится что-то большее, чем текущий размер, что в следствие дает, что я не могу допустим взять первую строчку, посчитать просто к-во ее детей и это к-во умножить на высоту прямоугольника, в к-ой помещается моя первая строка, тем самым высчитав мне нужный Y...

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


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