Название: QSlider Отправлено: cipher от Май 31, 2007, 17:42 День добрый, подскажет кто из знающих как наваять вот такой slider
(http://cipher.nm.ru/slider.JPG) Обычный slider выглядит вот так (http://cipher.nm.ru/slider2.JPG) т.е. мне нужно чтобы обязательно была эта белая полоска В WinAPI такое чудо делается путем добавления ключа TBS_ENABLESELRANGE - вот так вот Код:
добавлено спустя 5 часов 48 минут: неужели никто не пробовал организовать такой slider? Название: QSlider Отправлено: Racheengel от Май 31, 2007, 21:29 смотри в сторону paintEvent()
Название: QSlider Отправлено: pakulo от Июнь 01, 2007, 07:44 Да, прийдется наверное самому прорисовать его.
Название: QSlider Отправлено: cipher от Июнь 01, 2007, 10:44 люди, вы понимаете какой это гемор самому ваять, да ни за что не поверю что QT не позволяет так делать. Блин не может быть
Название: QSlider Отправлено: goer от Июнь 01, 2007, 11:00 Еще как может :-)
Если это чисто виндовый скин слайдера, то почему кути должна его поддерживать? А что прикажешь рисовать ей под линуксом? Или маком? Надо или менять библиотеку, или написать несложную процедуру рисования слайдера. Кстати с использованием стилей рисовать слайдер еще проще (т.к. там можно получить QRect ключевых областей слайдера - желобок, ползунок и т.д.) Название: QSlider Отправлено: cipher от Июнь 01, 2007, 11:21 Цитировать Если это чисто виндовый скин слайдера, то почему кути должна его поддерживать? А нафига тогда QT? Вот QT и должен был предоставить мне такой control. Блин, так QSlider и выделять области на самой шкале тоже не умеет!!! Как-то совсем убого. Ладно а что ты там про стили говорил? Можно подробнее, чую придётся самому всё-таки ваять добавлено спустя 2 минуты: а ... или может кто знает где можно дополнительные компоненты взять в сети. Должны же быть какие-то коллекции не стандартных control'ов. У меня чё-то поиск пока нифига не выдаёт Название: QSlider Отправлено: goer от Июнь 01, 2007, 11:45 Бывают же люди... Такие не только микроскопом гвозди будут забивать, они еще будут возмущаться почему микроскоп забивает гвозди хуже молотка.
Цитировать А нафига тогда QT? "Нафига" нужна кути почитай на сайте тролей. Цитировать Должны же быть какие-то коллекции не стандартных control'ов. У меня чё-то поиск пока нифига не выдаёт Больше времени потратишь на поиск низкокачественой либы которую потом все равно прийдется переписывать, чем напишешь код сам. Название: QSlider Отправлено: cipher от Июнь 01, 2007, 11:49 При чём тут микроскоп, ну если ты контора которая ваяет кроссплатформенную GUI так делай её удобной. Ладно это приперательство ни к чему нас не приведёт.
Мне всё же хотелось бы услышать про какие стили ты говорил? Цитировать Кстати с использованием стилей рисовать слайдер еще проще Название: QSlider Отправлено: goer от Июнь 01, 2007, 11:58 Цитировать При чём тут микроскоп, ну если ты контора которая ваяет кроссплатформенную GUI так делай её удобной. Они и сделали очень мощные средства для создания собственных GUI. Ведь понятно, что делать готовые скины никто не будет - это невыгодно как для разработчиков, так и для них. По поводу QStyle. Смотри пример demos/shared/arthurstyle.cpp. Обрати внимание на функцию Код: void ArthurStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) В ней есть кусок кода в котором они рисуют "свой" слайдер. Название: QSlider Отправлено: pakulo от Июнь 02, 2007, 16:16 не вижу ничего сложного в прорисовке своего контрола, тебе же не нужно разрабатывать его функциональность? да и функциональность несложная тут...
открой исходники куте, найди QSlider.cpp или как там, и посмотри paintEvent. Уверен код там не больше 10 строчек. Название: QSlider Отправлено: goer от Июнь 02, 2007, 16:38 Думаю что у QSlider-а paintEvent вообще не переопределен. Все зарыто в стилях.
Название: QSlider Отправлено: pakulo от Июнь 02, 2007, 17:26 А зачем думать? Берем да смотрим исходники
QPainter p(this); QStyleOptionSlider opt = d->getStyleOption(); opt.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle; if (d->tickPosition != NoTicks) opt.subControls |= QStyle::SC_SliderTickmarks; if (d->pressedControl) { opt.activeSubControls = d->pressedControl; opt.state |= QStyle::State_Sunken; } else { opt.activeSubControls = d->hoverControl; } style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this); Унаследовал клас, потом переопределяешь paintevent(). и Там рисуешь вот по примеру свою версию слидера. добавлено спустя 1 минуту: А вот функция которая возвращает опции стиля твоего слидера, ее изменять по ходу не нужно. QStyleOptionSlider QSliderPrivate::getStyleOption() const { Q_Q(const QSlider); QStyleOptionSlider opt; opt.init(q); opt.subControls = QStyle::SC_None; opt.activeSubControls = QStyle::SC_None; opt.orientation = orientation; opt.maximum = maximum; opt.minimum = minimum; opt.tickPosition = (QSlider::TickPosition)tickPosition; opt.tickInterval = tickInterval; opt.upsideDown = (orientation == Qt::Horizontal) ? (invertedAppearance != (opt.direction == Qt::RightToLeft)) : (!invertedAppearance); opt.direction = Qt::LeftToRight; // we use the upsideDown option instead opt.sliderPosition = position; opt.sliderValue = value; opt.singleStep = singleStep; opt.pageStep = pageStep; if (orientation == Qt::Horizontal) opt.state |= QStyle::State_Horizontal; return opt; } добавлено спустя 3 минуты: Но тут есть проблема, в куте много методов и членов обьявленны как приват, поэтому ты не сможешь получить у унаследованого класса доступ к ним, но может можно будет обойтись методами обьявлеными как паблик, тогда замени в ф-е QSliderPrivate::getStyleOption на новые методы, ибо оно не найдет приватовские... Если не выйдет, то тогда бери создавай свой слидер вообще, откываешь исходники копируешь и начинаешь добавлять/изменять что тебе нужно. Займет макс день, но зато сделаешь свой контрол :) Название: QSlider Отправлено: Kosh от Июнь 04, 2007, 09:29 Может тебя такой слайдер устроит ?
http://docs.huihoo.com/qwt/class_qwt_slider.html где скачать, смотри на главной странице |