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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [4.x.x] Несколько вопросов по QTreeVew  (Прочитано 13845 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« : Апрель 14, 2009, 11:43 »

1. Как задать свой цвет для курсора? Отнаследовался от QTreeVew и переопределяю:
Код
C++ (Qt)
void  QFullView::drawRow ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
QTreeView::drawRow(painter,option,index);
painter->setPen(Qt::green);
painter->drawRect(option.rect);
}
//
Вот только стандартное выделение затираем мое слева и внизу, да и артефакты остаются. Может кто объяснить как делать правильно.
2. Где и как можно задавать цвет текста итема, в зависимости от содержимого.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Rcus
Гость
« Ответ #1 : Апрель 14, 2009, 11:56 »

2.Qt::ForegroundRole   The foreground brush (text color, typically) used for items rendered with the default delegate.
Записан
crossly
Гость
« Ответ #2 : Апрель 14, 2009, 12:35 »

а мот просто setPalette...??
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #3 : Апрель 14, 2009, 12:44 »

Не нашел этого в палитре.
Записан

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

в описании enum QPalette::ColorRole
QPalette::Highlight   A color to indicate a selected item or the current item. By default, the highlight color is Qt::darkBlue.
QPalette::HighlightedText   A text color that contrasts with Highlight. By default, the highlighted text color is Qt::white.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #5 : Апрель 14, 2009, 13:26 »

Не то. Мне нужно, чтобы выделение было одного цвета, а курсор другого. Кстати, под виндой цвет курсора не зависит от цвета выделения.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #6 : Апрель 14, 2009, 16:35 »

Млин, целый день в (_|_). Так ничего и не сделал. На сколько я понял, за вид курсора отвечает стиль, и через палитру или стайлшит ничего не поменять. И нарисовать вручную не получается, линия появляется только слева и сверху от итема.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
crossly
Гость
« Ответ #7 : Апрель 14, 2009, 17:05 »

конкретизируй ... что имеется ввиду под курсором... цвет выделенного итема??
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Апрель 14, 2009, 17:07 »

И нарисовать вручную не получается, линия появляется только слева и сверху от итема.

Прилепи скрин глянуть. И что такое "курсор"? focus rect?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #9 : Апрель 14, 2009, 17:29 »

Сейчас кеды обновляю и скрин сделать не могу. В дизайнере закиньте на диалог QTreeWidget, сделайте у него:
allColumnsShowFocus - true
selectionMode - NoSelection
Вот рамочка итема при предпросмотре и есть курсор.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Апрель 14, 2009, 17:45 »

Вот рамочка итема при предпросмотре и есть курсор.

Сделал. Я сейчас под виндой, рамочка есть только в стиле CDE
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Апрель 14, 2009, 17:53 »

Заглянув в исходники, можно увидеть как рисуется эта "рамка":

Код
C++ (Qt)
void QTreeView::drawRow(QPainter *painter, const QStyleOptionViewItem &option,
                       const QModelIndex &index) const
{
...
   if (currentRowHasFocus) {
       QStyleOptionFocusRect o;
       o.QStyleOption::operator=(option);
       QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled)
                                 ? QPalette::Normal : QPalette::Disabled;
       o.backgroundColor = option.palette.color(cg, d->selectionModel->isSelected(index)
                                                ? QPalette::Highlight : QPalette::Background);
       int x = 0;
       if (!option.showDecorationSelected)
           x = header->sectionPosition(0) + d->indentationForItem(d->current);
       o.rect.setRect(x - header->offset(), y, header->length() - x, height);
       style()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, painter);
       // if we show focus on all columns and the first section is moved,
       // we have to split the focus rect into two rects
       if (allColumnsShowFocus && !option.showDecorationSelected
           && header->sectionsMoved() && (header->visualIndex(0) != 0)) {
           o.rect.setRect(0, y, header->sectionPosition(0), height);
           style()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, painter);
       }
   }
....
}

Заглянув в описание QStyleOptionFocusRect, видим, что:

Цитировать
QColor QStyleOptionFocusRect::backgroundColor

This variable holds the background color on which the focus rectangle is being drawn.
The default value is an invalid color with the RGB value (0, 0, 0). An invalid color is a color that is not properly set up for the underlying window system.

значит вот что нам нужно из всего кода:

....
Код
C++ (Qt)
o.backgroundColor = option.palette.color(cg, d->selectionModel->isSelected(index)
                                                ? QPalette::Highlight : QPalette::Background);
....

Откуда берется цвет и как его поменять, думаю понятно
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #12 : Апрель 14, 2009, 17:53 »

Ага. А под другими рамочка точечками. А мне нужна во всех стилях.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #13 : Апрель 14, 2009, 18:12 »

pastor, походу я сегодня перенапряг мозг, так что теперь вообще ничего не понимаю. Не можешь ли, если не затруднит, написать как должен выглядеть код, чтобы рисовалась рамка с цветом Qt::green?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Апрель 14, 2009, 18:32 »

Я думаю так должно работать:

Код
C++ (Qt)
void  QFullView::drawRow ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
          QStyleOptionViewItem opt(option);
          QPalette p = opt.palette;
          p.setColor(QPalette::Highlight, Qt::green);
          opt.palette = p;
          opt.showDecorationSelected = true;
QTreeView::drawRow(painter,opt,index);
}
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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