| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Панель компонентов из wxTobbleButton |
| Автор: itengineer 21.11.2008, 18:06 |
| Нужен класс, который будет включать в себя несколько wxToggleButton'ов. При выборе одного из них, все остальные должны ставить SetValue(false). Писать велосипед не хочется. Ещё хочу на wxTobbleButton поставить картинку. Пока нашёл только wxCustomButton. Может есть ещё какие-нибудь варианты? |
| Автор: t_rex 21.11.2008, 18:24 |
| М.. можно завести массив bool'ов, потом на все кнокпи навесить общий обработчик, в котором в зависимости от ID устанавливать нужный элемент массива в TRUE, а остальные в FALSE. Еще навесить на все конпки один обработчик EVT_UPDATE_UI, который в зависимости от ID будт проерять значение элемента массива и выставлять event'у Checked. Вот как-то так.. можно, допустим, не по ID а как-то через ClientData указывать адрес элемента массива. Т.е. делаем, допустим, список bool'ов, потом проходимся по нему, для каждого єлемента созаем новую кнопочку, вешаем на нее через Connect обработчик клика и update ui, а также вешаем CientData с адресом элемента массива |
| Автор: itengineer 21.11.2008, 18:35 |
| Я подумал о немного другом способе. Просто список кнопок, евент от которых обрабатывается в одном методе. Источник евента получает SetValue(true), а остальные false. Не знаю, как это соотносится с оптимальностью, но работать будет. Весь вопрос как раз в том, чтобы не изобретать велосипед, а использовать что-нибудь готовое, если есть. Кстати, а как с картинками на wxToggleButton'ах (или подобных классах)? |
| Автор: t_rex 21.11.2008, 19:43 |
| Ммм.. да, нормальное тоже решение. можно и так. По поводу картинок, ну есть wxThings но там надо прилично так дорабатыват напильником. И вид у кнопок не нативный, хотя есть wxRenderNative, но все равно надо будет дописывать совего кода прилично так. ЗЫ: А чем не устроило wxRadioButtonGroup ? если только одна кнопка всегда выбрана. |
| Автор: mes 21.11.2008, 20:04 |
| А стандартный wxToolBar у с тулами у которых флаг wxITEM_RADIO не подойдет ? Т.е использовать это в обработчике wxCommаndEvent`a ? Насколько я знаю wx для этого рекомендует использовать wxUiEventUpdate. Только обработчик должен знать ид нажатой кнопки, чтоб правильно установить состояние. Такой подход добавит декларативности. |
| Автор: monax 22.11.2008, 22:12 | ||
Та же проблема была, этот флаг помог её решить. |