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

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

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Два диапазона значений в DoubleSpinBox  (Прочитано 19044 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Январь 14, 2012, 12:39 »

Всем доброго времени суток.
Как известно в виджете DoubleSpinBox существует 2 свойства minimum и maximum, что позволяет установить допустимый диапазон вводимых значений.
Мне хотелось бы узнать, существует ли готовое решение, где было бы 2 таких диапазона.
К примеру: разрешить пользователю вводить числа от 0 до 1 и от 4 до 5.
Ну, а если такого решения не существует, то прошу оказать мне помощь в создании подобного компонента.  Только тут будет упрощение: мне нужен не диапазон, а дополнительное конкретное число.
К примеру: разрешить пользователю вводить число 0.5 и числа из диапазона от 4 до 5.
Всем заранее спасибо.
Записан
Bepec
Гость
« Ответ #1 : Январь 14, 2012, 12:50 »

Валидатор посмотрите. Он проверяет валидность вводимых данных, так что должен учесть все ваши пожелания.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Январь 14, 2012, 19:58 »

прошу прощения, где я могу это посмотреть. В свойствах компонента не нашёл.
Записан
Bepec
Гость
« Ответ #3 : Январь 14, 2012, 20:26 »

QDoubleValidator в ассистенте поищите.
К сожалению, помочь вам в его установке/настройке не могу, ранее не пользовался.
Поиск по форуму я думаю поможет.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Январь 15, 2012, 14:29 »

Мне кажется, что этот класс нужен для других целей... Как я понял, он проверяет на валидность введённых данных из текстовой строки с учётом локалей, минимума, максимума, ранга и типа данных. В моём случае из DoubleSpinBox'а я извлекаю число типа double. Я с лёгкостью могу его проверить на валидность при помощи оператора if. Так что QDoubleValidator это не совсем то, что мне нужно.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #5 : Январь 15, 2012, 14:42 »

может лучше такое сделать через радиокнопки? одна - пользователь хочет конкретное число (оно известно я так понимаю), вторая - пользователь вводит число в спинбокс.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
andrew.k
Гость
« Ответ #6 : Январь 15, 2012, 15:09 »

может лучше такое сделать через радиокнопки? одна - пользователь хочет конкретное число (оно известно я так понимаю), вторая - пользователь вводит число в спинбокс.
Да. Это сразу минус юзабилити.
Каким образом пользователь узнает о всех этих "допустимых" диапазонах просто взглянув на спинбокс?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #7 : Январь 15, 2012, 15:54 »

Нет. Это не вариант. Представьте, у меня на форме 10 спинбоксов, а для одного, для которого нужна модификация с вводом, стоит радиокнопка. Это не то, хоть и на много проще. Я же программу создаю не для личного использования. Будет не эстетично
Записан
andrew.k
Гость
« Ответ #8 : Январь 15, 2012, 16:06 »

в этом и суть, что не для себя жлаешь.
не вариант это как раз делать  диапазоны.
допусти будет допустимые:
1..1000 и от 1000000.. 10001000
как я узнаю о существовании второго диапазона?
а потом захочешь сделать 3 таких диапазона или еще больше.
наверняка можно решить как-то еще раз радио кнопки не нравятся
Записан
Bepec
Гость
« Ответ #9 : Январь 15, 2012, 17:14 »

Ловишь сигнал изменения значения, проверяешь в своей функции на валидность (т.е. вхождение в пределы), меняешь значение на стандартное (0 к примеру) и выводишь тултип с обозначением пределов.

Простое решение ^^
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Январь 15, 2012, 17:51 »

Ловишь сигнал изменения значения, проверяешь в своей функции на валидность (т.е. вхождение в пределы), меняешь значение на стандартное (0 к примеру) и выводишь тултип с обозначением пределов.

Простое решение ^^
Такой тултип достанет, т.к. для double ввод невалидных значений разрешен - они должны появляться в EditLine, иначе пользователю трудно ввести число. Др дело валидатор отсекает их прием. Обычно делают так:

- пользователь вводит, если "это число" (а не буква и др) то ввод отображается даже если число вне диапазона

- окно закрывается или фокус соскакивает с Edit или истекло время ожидания (напр 1 сек). Тогда проверяется на диапазон и если нет - модальный диалог с указанием что валидно (неплохо и предложить min/max/default)

Ну да, это конечно "не так просто"  Улыбающийся
Записан
Bepec
Гость
« Ответ #11 : Январь 15, 2012, 17:59 »

Я и имел в виду, в момент установки значения. Обычно после потери фокуса происходит Подмигивающий

Хотя я бы сделать версий 5-6 с разными вариантами Улыбающийся И потом сам бы пытался ввести ^^ Потому что теоретически может быть гуд, а на деле...
Записан
andrew.k
Гость
« Ответ #12 : Январь 15, 2012, 18:53 »

это все чушь. пользователь должен видеть, что он может ввести.
а если для этого он должен сначала ввести что-то, получить отлуп узнать, что оказывается нужно было вводить.
надо пересмотреть подход.
Записан
Bepec
Гость
« Ответ #13 : Январь 15, 2012, 19:05 »

Ещё бы узнать лучше, что хочет автор реализовать этими двумя диапазонами.
Мб подскажем лучшее решение?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Январь 15, 2012, 19:34 »

это все чушь.
Для форумчан с громким голосом разжевываю:

Пример: диапазон 100-200, текущее значение 150. Пользователь перевел фокус и вводит напр 120. Он нажал 1, текст в Edit был selected, ну значит 150 заменилось на 1. Это значение невалидно, но выскакивать с алертом/тултипом явно плохо
Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


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