Название: Узнать какой класс у widget Отправлено: Ovoshlook от Мая 27, 2011, 16:08 Очередной вопрос от имени меня))
В общем на Layout лежит widget. каким образом мне узнать какой у этого widget класс? З.Ы. Сам я конечно знаю какого класса widget я положил,но хотелось бы сразу написать более менее общую функцию для поиска. Да и вообще по типам я еще не брался сравнивать. Менее обобщенно задача звучит так: На определенном компоновщике есть виждет чекбокс. Если свойство этого виджета равно true то я удаляю компанощик вместе с виджетом. Таким образом задача сводится к следующему: а) Узнать класс виджета (чекбокс или не чекбокс) 2) Если это чекбокс то надо посмотреть состояние его свойства isChecked и если оно true то удалить компоновщик вместе с этим виджетом. Как что удалить я знаю но как проверить какой класс у этого виджета я пока что не совсем понимаю. Заранее всем спасибо. Название: Re: Узнать какой класс у widget Отправлено: GreatSnake от Мая 27, 2011, 16:12 Код
Название: Re: Узнать какой класс у widget Отправлено: kambala от Мая 27, 2011, 17:52 Код
Название: Re: Узнать какой класс у widget Отправлено: Ovoshlook от Мая 28, 2011, 20:41 Спасибо за ответы, но появилась очередная проблема. У меня на лайауте не один виджет а несколько. Мне нужно пройтись по лайоуту, найти виджет типа чекбокс и посмотреть его состояние checked.
Я попытался это сделать следующим образом: Код: QCheckBox *item=static_cast<QCheckBox *>(HBoxLayout->itemAt(HBoxLayout->indexOf(CheckBox))); Но в это случае мне выдается ошибка error: invalid static_cast from type 'QLayoutItem*' to type 'QCheckBox*' что собственно то и понятно, пытаюсь привести к типу объект совершенно другого типа. Идей как этого избежать у меня больше к сожалению нет. Может кто то имел опыт вытаскивания нужного виджета из лайоута? Название: Re: Узнать какой класс у widget Отправлено: madRoger от Мая 28, 2011, 21:11 попробуй так:
Код: QCheckBox *item=static_cast<QCheckBox *>(HBoxLayout->itemAt(HBoxLayout->indexOf(CheckBox))->widget()); Название: Re: Узнать какой класс у widget Отправлено: Ovoshlook от Мая 28, 2011, 21:24 Спасибо. Ошибка пропала) Правда прога крахом закончилась) но это уже другой вопрос) Завтра буду смотреть) Спасибо за помощь)
Название: Re: Узнать какой класс у widget Отправлено: mutineer от Мая 28, 2011, 21:27 замени static_cast на qobject_cast и после приведения проверяй не нулевой ли указатель
Название: Re: Узнать какой класс у widget Отправлено: lit-uriy от Мая 29, 2011, 07:35 вообще для поиска виджетов есть такой метод:
QObject::findChildren<>() посмотрите в аистенте его использование Название: Re: Узнать какой класс у widget Отправлено: Ovoshlook от Мая 29, 2011, 15:01 Всем спасибо за помощь. Сделал вот так (так как знаю на каком месте лежит нужный мне виджет) чтобы не загонять в функцию еще одну ссылку:
Код:
Хотя с QObject::findChildren<>() было бы правильнее. Если не будет гореть по времени то постараюсь реализовать. Еще раз всем спасибо за помощь и терпение. Название: Re: Узнать какой класс у widget Отправлено: p166 от Июня 01, 2011, 11:50 Как вариант:
Код: QList<QCheckBox *> allCheckBox = HBoxLayout->findChildren<QCheckBox *>(); Название: Re: Узнать какой класс у widget Отправлено: GreatSnake от Июня 01, 2011, 13:55 Как вариант: и размер allCheckBox будет 0, т.к. у QLayout нет в потомках виджетов.Код: QList<QCheckBox *> allCheckBox = HBoxLayout->findChildren<QCheckBox *>(); |