Название: QProgressBar, изменение цвета (Windows Vista +) Отправлено: kostya2vntu от Апрель 26, 2010, 00:25 В Windows Vista появилась возможность задавать стиль ProgressBar'a:
(http://www.thomaspleasance.com/images/VistaProgressBar.png) http://msdn.microsoft.com/en-us/library/aa361776.aspx (http://msdn.microsoft.com/en-us/library/aa361776.aspx) Как можно применить это в Qt? Простой вызов SendMessage(ui->progressBar->winId(), PBM_SETSTATE, PBMST_ERROR, 0) в конструкторе MainWindow ничего не изменяет. Название: Re: QProgressBar, изменение цвета (Windows Vista +) Отправлено: Marat(Qt) от Апрель 26, 2010, 00:32 Я бы лучше это в setStyleSheet прописал - кода побольше конечно, но зато кроссплатформенно
Название: Re: QProgressBar, изменение цвета (Windows Vista +) Отправлено: SABROG от Апрель 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'ов). Но нечто похожее сделать можно. Название: Re: QProgressBar, изменение цвета (Windows Vista +) Отправлено: zenden от Апрель 26, 2010, 10:56 Вы путаете, Qt не использует стандартные виндовые контролы, независимо от того, установлен WA_NativeWindow или нет. Поэтому вызывать SendMessage(..., PBM_SETSTATE) нет никакого смысла.
Не забывайте кстати что этот прогрессбар еще и анимированный)) посмотрим кто сможет это сделать, да еще и кроссплатформенно Название: Re: QProgressBar, изменение цвета (Windows Vista +) Отправлено: Авварон от Апрель 26, 2010, 13:51 а почему стиль (QStyle) нельзя поменять?
Название: Re: QProgressBar, изменение цвета (Windows Vista +) Отправлено: kostya2vntu от Апрель 26, 2010, 14:32 а почему стиль (QStyle) нельзя поменять? А ты поекспериментируй. По моему Qt каким то образом определяет как рисовать виджет, или использует системный, но изменение темы оформления затрагивает и Qt'шные приложения, а как самому это обрабатывать мне пока неизвестно. Название: Re: QProgressBar, изменение цвета (Windows Vista +) Отправлено: Авварон от Апрель 26, 2010, 18:14 ну естессно оно юзает нативный.
в стиле есть приблизительно метод drawProgressBar, который зовет функции винапи для отрисовки. аналогично маковский стиль. все остальные стили рисуются ручками |