Название: 3 QComboBox и 1 список Отправлено: vorotislav от Январь 13, 2015, 09:16 Доброго времени суток.
Есть задача, получать в программе список всех com-портов и выбирать 3 из них для подключения. Сначала делал так: Код: // cbPortName* - объект класса QComboBox И все хорошо, работает. Но здесь можно выбрать один и тот же порт для подключения. И тогда в программе вместо 3-х подключений будет одно и две ошибки. А можно ли сделать так: список доступных портов в, например, QStringList. Затем мы задаем элементы для первого комбобокса. Пользователь выбирает нужный, и тут надо чтоб создавалась или копия списка минус выбранный или в исходном минусовать. Затем выбираем во втором и еще раз убираем выбранный. Не подскажете, примерно в каком направлении думать? Я так подозреваю, нужно будет парочку слотов писать, но в таком случае как привязать комбобоксы. Если я скажем захочу с третьего начать, затем в первом выбрать и только потом во втором. Заранее благодарен. UPD. Сейчас подумал, что у самого комбобокса есть удаление элемента по индексу. Если скажем сделать один слот на все комбобоксы, на сигнал activated(int), то можно удалить у оставшихся этот элемент. Только как сделать одним слотом пока не представляю. Например, выбрал я во втором боксе элемент1, в первом и третьем его надо удалить. Выбрал я элемент4 в первом, во втором и третьем его надо удалить. Я научился ловить источник сигнала: QComboBox *_comboBox = qobject_cast<QComboBox *> (QObject::sender()); а как мне теперь обратиться к оставшимся - не знаю. Так же интересует другой момент. Скажем выбрал я элемент1 в боксе1. Но промазал (мышь чуток не довел), а хотел элемент2. При выборе элемент2, надо чтоб элемент1 вернулся во все боксы. Заранее благодарен. Название: Re: 3 QComboBox и 1 список Отправлено: Пантер от Январь 13, 2015, 09:27 У QComboBox есть сигнал currentIndexChanged. Коннектишь сигнал от каждого комбобокса на один слот, в котором пробегаешь по всем комбобоксам и корректируешь их списки. Вот и все. :)
Название: Re: 3 QComboBox и 1 список Отправлено: vorotislav от Январь 13, 2015, 09:39 Пантер, но если пробегать по всем комбобоксам, таким способом можно и у нужного удалить элемент. Скажем, выбрал элемент с индексом 1. делаю слот:
Код: void slotChangeItems(int index) Название: Re: 3 QComboBox и 1 список Отправлено: vorotislav от Январь 13, 2015, 09:42 А если каждому комбобоксу назначить setObjectName, я же смогу в слоте определить objectName вызывающего комбобокса, и как следствие пройтись по оставшимся по таким же именам?
Название: Re: 3 QComboBox и 1 список Отправлено: Bepec от Январь 13, 2015, 09:54 If (QComboBox(sender()) != cbPortName1)
Название: Re: 3 QComboBox и 1 список Отправлено: Пантер от Январь 13, 2015, 10:15 If (QComboBox(sender()) != cbPortName1) Верес, а кастить тут зачем???Код
Название: Re: 3 QComboBox и 1 список Отправлено: Пантер от Январь 13, 2015, 10:17 Пантер, но если пробегать по всем комбобоксам, таким способом можно и у нужного удалить элемент. Скажем, выбрал элемент с индексом 1. делаю слот: Только не индексом удаляй, а проанализируй айтемы.Код: void slotChangeItems(int index) Название: Re: 3 QComboBox и 1 список Отправлено: Bepec от Январь 13, 2015, 11:15 По привычке :)
Название: Re: 3 QComboBox и 1 список Отправлено: vorotislav от Январь 14, 2015, 08:29 Всем спасибо! Сделал свой велосипед :)
|