Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Givoi от Август 22, 2012, 19:22



Название: Один динамический источник данных для нескольких combobox'ов
Отправлено: Givoi от Август 22, 2012, 19:22
Вот такая проблема возникла... как лучше сделать, на форме 4 combobox, из которых можно выбрать один из ком портов, если в одном комбобоксе выбран допустим первый ком порт, то в 3 остальных комбобоксах он должен исчезать из выбираемых. При этом нужно учесть что можно поменять порт, и тот который был выбран до этого должен вернуться в список. 0_о


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: Igors от Август 22, 2012, 19:31
Не проще ли давать отлуп типа "этот порт уже выбран"?  А то "исчезновение" может быть неправильно понято


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: Givoi от Август 22, 2012, 19:32
неа, ТЗ


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: Bepec от Август 22, 2012, 19:47
ну сразу видна гадость - остальные комбобоксы должны содержать пункт аля "не выбрано" :)

А так просто зацепить все комбы на 1 слот и там через sender разруливать ситуацию :)


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: andrew.k от Август 22, 2012, 21:08
неа, ТЗ
Какое-то странное ТЗ.
Прямо так и написано, что должно что-то исчезать?


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: andrew.k от Август 22, 2012, 21:25
А если, например, я по ошибке в первом комбобоксе выбрал COM1, а во втором COM2. Затем обнаружил свою ошибку и хочу поменять их местами?
Нужно будет делать три операции, вместо нормальных двух, либо даже одной (при нормальной реализации)!
А если всего будет доступно только 4 порта, то выбрав один раз все порты их уже невозможно будет изменить (т.к. все порты выбраны, то комбобоксы должны быть пустые)

Раз уж нужно именно 4 комбобокаса, я бы сделал так:
1. Во всех комбобокса должен быть конечно же полный список всех доступных портов.
2. При выборе порта в одном из комбо, смотрим не выбран ли он в других. Если не выбран, то все ок.
3. Если уже выбран в другом комбо.
варианты:
3а. Повторяющийся заменяем на первый по порядку свободный
3б. Повторяющийся заменяем на то, который был до этого выбран в текущем элементе.

Вариант 3б позволит в один клик, поменять местам два порта, а это наверняка будет частая операция, либо как минимум полезная.
Вариант 3а простой и понятный.

Не думаю, что все это будет противоречить ТЗ.

И вообще исчезающие элементы управления это глупость, если что-то должно быть недоступно, оно должно быть выключено (disabled), но оставаться на экране и желательно не менять своего положения.
В твоей реализации если кто-то перепутает уже настроенные порты, перенастройка превратится в головоломку. Что где надо тыкнуть, чтобы там где-то появилось то, что требудется.
Пересмотри подход.


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: andrew.k от Август 22, 2012, 21:27
Ничегосебе какое большое сообщение настрочил) Буду надеяться, что не зря)


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: andrew.k от Август 22, 2012, 21:37
ну сразу видна гадость - остальные комбобоксы должны содержать пункт аля "не выбрано" :)
Это кстати тоже чушь.
В комбобоксе легко может быть ничего не выбрано.
Может еще в лайнэдиты писать "ничего не вписано", если он пуст?


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: Bepec от Август 22, 2012, 22:22
LineEdit пуст. А ComboBox подразумевает содержание :) Не со мной спорь - с пользователем. 
Пустой комбобокс выбора порта - ЧЗХ?

Если такое ТЗ - делай по ТЗ. Как примерно я уже описал.

А если есть простор для фантазии - варианты andrew.k к вашим услугам :)



Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: andrew.k от Август 22, 2012, 22:35
LineEdit пуст. А ComboBox подразумевает содержание :) Не со мной спорь - с пользователем.  
Пустой комбобокс выбора порта - ЧЗХ?
Какой из тебя пользователь мне остается только догадываться.
Не пустой комбобокс, а комбобокс в котором ничего не выбрано! Разницу понимаешь?

А вот если делать по этому "ТЗ", то в случае только 4 доступных портов и 4 комбобоксах, как бы более чем наполовину очевидно, что все они будут пустыми, после сделанного выбора во всех комбо. И изменить эту ситуацию станет невозможно!


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: andrew.k от Август 22, 2012, 22:40
Кстати это вариант 3а, если выбрать тот, что уже есть, повторяющийся комбобокс "теряет" выбранный элемент, т.е. в нем после этого ничего не выбрано.


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: andrew.k от Август 22, 2012, 22:47
Хозяйке на заметку:
"Если у вас нет времени сделать что-то правильно, где же вы найдете время, чтобы это переделать?" автор мне неизвестен.


Название: Re: Один динамический источник данных для нескольких combobox'ов
Отправлено: Givoi от Август 23, 2012, 20:42
andrew.k, спасибо большое. Все сделал. Добавил в список первую(точнее нулевую) запись "NONE", и если выбирается порт, который уже выбран в другом комбобоксе, то в том, котором порт был выбран ранее, значение сбрасывается на "NONE".