Название: Фиксация значения чекбокса Отправлено: Ovoshlook от Июнь 04, 2011, 13:15 Здравствуйте снова!))
в общем задача передо мной всала следующего характера: У меня есть TabWidget. К нему прикреплен Widget на котором лежит основной Layout. На основной Layout кладется еще 3 Layout'а (0,1 и 2) На Layout 1 по нажатию кнопки накидывается еще один компоновщик в котором лежат CheckBox и TextEdit. В момент, когда у чекбокса меняется значение (togged) посылается сигнал, который соединен со слотом обработки этого сигнала: ChangeCheckedState Этот слот обрабатывает сигнал следующим образом: Он изменяет значение элемента в массиве с 0 на 1 если чекбокс isChecked==true и не изменяет если isChecked==false. Элемент массива по индексу соответсвует номеру компоновщика в котором лежит этот чекбокс. Собственно функцию я написал таким образом: Код: void OTS_MainWindow::ChangeCheckedState(QTabWidget *TabWidget) Просьба пока что просто посмотреть верно ли реализован сам алгоритм проверки на состояние и добавление элемента в массив. И имеются ли в немкакие либо загвоздки? просто своими глазами косяка я увидеть не смог, может просто не совсем внимательно уследит Оговорюсь что функция работает, но не совсем правильно. Заранее спасибо за анализ. Название: Re: Фиксация значения чекбокса Отправлено: GreatSnake от Июнь 04, 2011, 13:54 Бррр, как же всё, извинясь, через одно место сделано (
Никогда нельзя так завязываться на иерархию объектов. Понадобится чуток изменить дизайн и все развалится нафиг. В общем как минимум на сигнал Код нельзя вешать такой слот Код
До чекбокса, испустившего сигнал добираться нужно так: QCheckBox* chb = qobject_cast< QCheckBox* >( sender() ); Читай внимательно Сигналы и слоты (http://doc.crossplatform.ru/qt/4.7.x/signalsandslots.html). Название: Re: Фиксация значения чекбокса Отправлено: Ovoshlook от Июнь 04, 2011, 15:40 Не не. слот у меня правильно на сигнал повешен. я это делаю через связующую функцию и про сигналы слоты читал конечно же. Может не все знаю но основные понятия уяснил)
А вот про то как добраться до нужного мн чекбокса за подсказку спасибо) щас буду в эту сторону смотреть) Ну а по поводу иерархии объектов и завязки на них- просто у меня дизайн и конструкция динамически меяются, поэтому приходится вот так вот выеживаться... Название: Re: Фиксация значения чекбокса Отправлено: GreatSnake от Июнь 04, 2011, 16:01 Ну а по поводу иерархии объектов и завязки на них- просто у меня дизайн и конструкция динамически меяются, поэтому приходится вот так вот выеживаться... А не проще завести какой-нибудь мэп типа QMap< QCheckBox*, int >?Название: Re: Фиксация значения чекбокса Отправлено: Ovoshlook от Июнь 04, 2011, 18:27 Для дальнейшего управления мне нужно знать на каком именно компановщике произведен сигнал. А их много. Не совсем понимаю как QMap мне в этом поможет. Ну это конечно скорее всего из за моей неосведомленности по поводу этого класса.
Я решил взять старый алгоритм: Пробежаться по всем нужным мне компановщикам и посмотреть состояние чекбокса. Только вот не свосем понятно где я накосячил, потому чтофункция это делает, но только с первым элементом и только 2 раза (меняет состояние с 0 на 1 и с 1 на ноль), либо со всеми , но тогда она меняет состояния только с 0 на 1, и обратоно делать уже не хочет. Непонятно вот еще что. У меня есть функция, которая практически точь в точь копирует те же действия, только она не собирает информацию о статусе checkbox, а удаляет выделенный. И вызывается не при сигнале на смену состояния, а специальной кнопочкой. Код: void OTS_MainWindow::RemoveVariantForSingleAnsverQuestion(QTabWidget *TabWidget) Она работает отлично. Все удаляет что не нужно. Отличается она от функции о сборе информации только содержанием if (ну и циклом, но это не принципиально, потому ято и с циклом while все работает точно так же) Проблемы в работе с этой функцией начинаются тогда, когда я, в функции которая добавляет эти самые компоновщики с чекбоксами делаю коннект к функции которая в первом посте. При чем вести себя функция удаления начинает точно так же как и функция, описанная в первом посте. Так же не хочет удалять все кроме первого компоновщика. Я так понимаю что при коннекте чего то не так становится. Название: Re: Фиксация значения чекбокса Отправлено: Ovoshlook от Июнь 05, 2011, 10:00 Проблема была непосредственно в алгоритме. Спасибо за участие и за новые знания)
|