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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProgressBar, изменение цвета (Windows Vista +)  (Прочитано 7471 раз)
kostya2vntu
Гость
« : Апрель 26, 2010, 00:25 »

В Windows Vista появилась возможность задавать стиль ProgressBar'a:

http://msdn.microsoft.com/en-us/library/aa361776.aspx
Как можно применить это в Qt?
Простой вызов SendMessage(ui->progressBar->winId(), PBM_SETSTATE, PBMST_ERROR, 0) в конструкторе MainWindow ничего не изменяет.
Записан
Marat(Qt)
Гость
« Ответ #1 : Апрель 26, 2010, 00:32 »

Я бы лучше это в setStyleSheet прописал - кода побольше конечно, но зато кроссплатформенно
Записан
SABROG
Гость
« Ответ #2 : Апрель 26, 2010, 00:54 »

Простой вызов SendMessage(ui->progressBar->winId(), PBM_SETSTATE, PBMST_ERROR, 0) в конструкторе MainWindow ничего не изменяет.

winId() имеют только основные окна (главное окно, окна диалогов, messagebox'ы). Остальные дочерние окна (виджеты) - рисованные. С помощью этих методов можно переключить Qt на работу с родными окнами ОС:

Цитировать
Use the QT_USE_NATIVE_WINDOWS=1 in your environment.
Set the Qt::AA_NativeWindows attribute on your application. All widgets will be native widgets.
Set the Qt::WA_NativeWindow attribute on widgets: The widget itself and all of its ancestors will become native (unless Qt::WA_DontCreateNativeAncestors is set).
Call QWidget::winId to enforce a native window (this implies 3).
Set the Qt::WA_PaintOnScreen attribute to enforce a native window (this implies 3).

Только я бы не советовал этого делать. Родные окна сильно тормозят, если менять их размеры, через splitter например.

Через стили не получиться задать именно такой вид. Полоски прогресса в стилях отдельные сущности, поэтому невозможно узнать где начало и конец полоски, чтобы задать затенение, да и градиент не установить, раз сама полоса прогресса это набор мелких кусочков (chunk'ов). Но нечто похожее сделать можно.
Записан
zenden
Гость
« Ответ #3 : Апрель 26, 2010, 10:56 »

Вы путаете, Qt не использует стандартные виндовые контролы, независимо от того, установлен WA_NativeWindow или нет. Поэтому вызывать SendMessage(..., PBM_SETSTATE) нет никакого смысла.

Не забывайте кстати что этот прогрессбар еще и анимированный)) посмотрим кто сможет это сделать, да еще и кроссплатформенно
« Последнее редактирование: Апрель 26, 2010, 11:05 от zenden » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Апрель 26, 2010, 13:51 »

а почему стиль (QStyle) нельзя поменять?
Записан
kostya2vntu
Гость
« Ответ #5 : Апрель 26, 2010, 14:32 »

а почему стиль (QStyle) нельзя поменять?
А ты поекспериментируй.
По моему Qt каким то образом определяет как рисовать виджет, или использует системный, но изменение темы оформления затрагивает и Qt'шные приложения, а как самому это обрабатывать мне пока неизвестно.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Апрель 26, 2010, 18:14 »

ну естессно оно юзает нативный.
в стиле есть приблизительно метод drawProgressBar, который зовет функции винапи для отрисовки.
аналогично маковский стиль.
все остальные стили рисуются ручками
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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