Russian Qt Forum

Qt => Общие вопросы => Тема начата: spectre71 от Ноябрь 13, 2009, 23:19



Название: QPalette::ColorGroup
Отправлено: spectre71 от Ноябрь 13, 2009, 23:19
QT 4.5.2
Цитировать
The Active group is used for the window that has keyboard focus.
The Inactive group is used for other windows.
The Disabled group is used for widgets (not windows) that are disabled for some reason.

- "Active" группа используется для окна, обладающего фокусом ввода.
- "Inactive" группа используется для других окон.
- "Disabled" группа используется для виджетов (не окон), которые, недоступны(блокированы) по некоторым причинам.

Кому-нибудь кажется что здесь есть концептуальные ошибки? Или у меня глюки. :-[ :)


Название: Re: QPalette::ColorGroup
Отправлено: MoPDoBoPoT от Ноябрь 13, 2009, 23:50
В упор не вижу  :)
Active - активное состояние виджета (когда isEnabled()==true и окно этого виджета имеет фокус)
Inactive - неактивное (когда isEnabled()==true и окно этого виджета не имеет фокус)
Disabled - недоступное (когда isEnabled()==false).
По-моему они самодостаточны.


Название: Re: QPalette::ColorGroup
Отправлено: spectre71 от Ноябрь 14, 2009, 00:07
В упор не вижу  :)
Active - активное состояние виджета (когда isEnabled()==true и окно этого виджета имеет фокус)
Inactive - неактивное (когда isEnabled()==true и окно этого виджета не имеет фокус)
Disabled - недоступное (когда isEnabled()==false).
По-моему они самодостаточны.

Выше привел выдержку из доки.
Только Disabled относится к виджету! Остальное к окну!


Название: Re: QPalette::ColorGroup
Отправлено: MoPDoBoPoT от Ноябрь 15, 2009, 17:07
Я в англиЦком не особо силен, но поведение именно такое, какое я описал.


Название: Re: QPalette::ColorGroup
Отправлено: spectre71 от Ноябрь 16, 2009, 14:16
Ладно, допустим что в доке ошибка. :) Хотя ошибка в самой концепции групп.

Привиду простой пример:
- берем таблицу QTableView;
- делаем  модель QAbstractItemModel;
- в модели несколько колонок;
- для всех колонок возвращаем флаг Qt::ItemIsSelectable;
- для всех колонок кроме одной возвращаем флаг Qt::ItemIsEnabled;
- выставляем режим селектирования полной строки;
И получаем ерунду, смотрите картинки:
focused.png - QTableView - имеет фокус ввода
nofocused.png - QTableView - не имеет фокус ввода
Элементы в колонке "Task Name" не имеют флага Qt::ItemIsEnabled
====
Уже как минимум должны быть не 3, а 4 группы
Active, Inactive, ActiveDisabled, InactiveDisabled
А лучше два флага "bool Active" и "bool Enabled":
вместо method(ColorGroup cg, ...) - method(bool Active, bool Enabled, ...)





Название: Re: QPalette::ColorGroup
Отправлено: MoPDoBoPoT от Ноябрь 16, 2009, 22:16
Действительно, смотрится как-то не эстетично  :)
Мне кажется это как минимум багрепорт.


Название: Re: QPalette::ColorGroup
Отправлено: spectre71 от Ноябрь 16, 2009, 22:47
Действительно, смотрится как-то не эстетично  :)
Мне кажется это как минимум багрепорт.

Как минимум.

На самом деле просто когда разрабатывали QPalette::ColorGroup не до конца продумали.  :(
Сейчас Disabled - отдельный вариант, но это не правильно, это отдельная(независимая) мода, хоть и не часто в этом есть необходимость.

На мой взгляд в группах палитры нужены как минимум 4 независымых режима + возможность расширения своими.
4 режима:
bool Active
bool Enabled
bool Highlight - поскольку может быть применим не только к BackGround или Text(ForeGround)
bool Special - зависит от контекста использования(зависит от компонента), в большинстве случаев нужен для отрисовки в режиме удержания компонента левой кнопкой мыши например, Sunken для Buttons, CheckBox, ...