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

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

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

Сообщений: 5876


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


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

Не то. Ты задал цвет выделения, но не цвет рамки.
Записан

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

Сообщений: 5876


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


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

Вот решение проблемы:
Код
C++ (Qt)
QTreeView::drawRow(painter,option,index);
if (index.row()==currentIndex().row())
{
QRect rect=option.rect;
rect.setHeight(rect.height()-1);
rect.setWidth(rect.width()-1);
painter->setPen(Qt::green);
painter->drawRect(rect);
}
Уменьшение ректа на единицу снизу и справа поставило все на свои места.
Спасибо Lion'у из джаббер конфы.
Записан

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

Сообщений: 2901



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

Возвращается ещё раз к коду и описанию:

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

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

This variable holds the background color on which the focus rectangle is being drawn.

Также можешь заглянуть в исходники drawPrimitive и посомтреть как отрисовывается фокус рект. Другое дело, что это не будет работать под всеми стилями.

А какая проблема отрисовать самому? Снова таки загляни в исходники отрисовки Focus Rect
Записан

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

Сообщений: 5876


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


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

Дык все уже отрисовал. Спасибо за помощь.
Записан

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

Уменьшение ректа на единицу снизу и справа поставило все на свои места.
Спасибо Lion'у из джаббер конфы.
Хм. А нас почему игнорируют
http://www.forum.crossplatform.ru/index.php?showtopic=2590
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


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

igor_bogomolov: Первым был Lion, я воспользовался его подсказкой. Твой пример немного не катит из-за проблем с заданием цвета.
Записан

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

Цитата: crossplatform
А то что painter->drawRect(option.rect) не полнстью рисуется, так попробуйте для option.rect сместить его нижнию-правую точку на один пиксел
Да, ну да ладно.

А по поводу почему
QStyleOptionFocusRect o;
o.backgroundColor = Qt::red;
искажает цвет, мне до сих пор непонятно. Если кто объяснит буду признателен. Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



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

искажает цвет, мне до сих пор непонятно. Если кто объяснит буду признателен. Улыбающийся

Я писал выше, отрисовка фокус рект зависит от стиля. Поищи в исходниках Qt "PE_FrameFocusRect", и глянь как происходит отрисовка в каждом стиле. Вопросы пропадут Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
igor_bogomolov
Гость
« Ответ #23 : Апрель 15, 2009, 12:42 »

Понятненько. Разобрался.
Для Windows style, в исходниках цвет преобразуется следущим образом
Код
C++ (Qt)
QColor patternCol((bg_col.red() ^ 0xff) & 0xff, (bg_col.green() ^ 0xff) & 0xff, (bg_col.blue() ^ 0xff) & 0xff);

Поэтому чтобы отображался требуемый цвет, нужно его таким же образом преобразовать обратно
QColor color = Qt::red;
Код
C++ (Qt)
QColor newcolor((color.red() ^ 0xff) & 0xff, (color.green() ^ 0xff) & 0xff, (color.blue() ^ 0xff) & 0xff);
Отрисовку "курсора" сделал так
Код
C++ (Qt)
if ((option.state & QStyle::State_HasFocus)) {
QStyleOptionFocusRect o;
o.rect = option.rect.adjusted(1,1,-1,-1);
o.QStyleOption::operator=(option);
o.state |= QStyle::State_KeyboardFocusChange;
o.state |= QStyle::State_Item;
o.backgroundColor = newcolor;
QApplication::style()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, painter);
}
Другие стили не смотрел Улыбающийся

P.S. Что то при редактировании кода вместо пробелов кракозябры кокоето рисуются
« Последнее редактирование: Апрель 15, 2009, 13:27 от igor_bogomolov » Записан
dr_Begemot
Гость
« Ответ #24 : Апрель 15, 2009, 13:12 »

У меня тоже возник вопрос...

Какой сигнал у QTreeView перехватывать, чтобы фиксить выбранный узел?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #25 : Апрель 15, 2009, 19:04 »

Цитата: crossplatform
А то что painter->drawRect(option.rect) не полнстью рисуется, так попробуйте для option.rect сместить его нижнию-правую точку на один пиксел
Да, ну да ладно.
Упс, извини. Я воспользовался твоим советом, но сместил на 1 пиксел вниз, вверх не подумал даже. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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