Название: Узнать компановщик у произвольного QWidget Отправлено: kim от Июнь 18, 2011, 11:47 Доброго времени суток.
Собственно вопрос: QWidget *window = new QWidget; QPushButton *button1 = new QPushButton("One"); QHBoxLayout *layout = new QHBoxLayout; layout->setObjectName(QString::fromUtf8("curr_layout")); layout->addWidget(button1); window->setLayout(layout); window->show(); Как через button1 получить имя компановщика "curr_layout" ? Название: Re: Узнать компановщик у произвольного QWidget Отправлено: Пантер от Июнь 18, 2011, 11:48 Чего?
Название: Re: Узнать компановщик у произвольного QWidget Отправлено: kim от Июнь 18, 2011, 12:03 сейчас поясню:
вот так я могу перебрать все виджеты добавленные в QHBoxLayout: QLayoutItem *child; while ((child = layout->takeAt(0)) != 0) { qDebug()<< child->widget()->objectName(); } а мне нужно наоборот, узнать в какой именно layout (на форме их несколько) добавлен button1 т.е. вытащить имя компановщика имея только button1 Название: Re: Узнать компановщик у произвольного QWidget Отправлено: BRE от Июнь 18, 2011, 12:05 Поискать этот виджет по очереди в каждом layout?
Название: Re: Узнать компановщик у произвольного QWidget Отправлено: kim от Июнь 18, 2011, 12:10 как вариант, но геморойный... т.к. все намного сложнее, это в разы все усложнит...
мож свойство какое есть... я нашел только layout(); но оно почемуто всегда = 0. Название: Re: Узнать компановщик у произвольного QWidget Отправлено: GreatSnake от Июнь 18, 2011, 12:31 Как-то так:
Код Хотя при сложных компоновках могут быть ньюансы. Название: Re: Узнать компановщик у произвольного QWidget Отправлено: BRE от Июнь 18, 2011, 12:44 как вариант, но геморойный... т.к. все намного сложнее, это в разы все усложнит... Тогда можно просто использовать указатель на parent. При помещении виджета в layout последний становиться его parent'ом.Код
мож свойство какое есть... я нашел только layout(); но оно почемуто всегда = 0. Почитай в документации, что он возвращает.Название: Re: Узнать компановщик у произвольного QWidget Отправлено: kim от Июнь 19, 2011, 00:02 Читал я про layout()...
Returns the layout manager that is installed on this widget, or 0 if no layout manager is installed. только не понял логики: w = w->parentWidget(); return w->layout(); да еще и в цикле... в ассистанте же ясно написано- возвращает layout manager если он установлен для этого! виджета. непонимаю.... но работает. 2й Вариант не работает: Код всем спасибо, буду дальше разбиратся. Название: Re: Узнать компановщик у произвольного QWidget Отправлено: BRE от Июнь 19, 2011, 09:59 Читал я про layout()... Так для button1 слой и не устанавливался (возвращает 0), а вот для виджета window слой устанавливался.Returns the layout manager that is installed on this widget, or 0 if no layout manager is installed. только не понял логики: w = w->parentWidget(); return w->layout(); да еще и в цикле... в ассистанте же ясно написано- возвращает layout manager если он установлен для этого! виджета. непонимаю.... но работает. Этот виджет window является владельцем виджета button1. Код
Название: Re: Узнать компановщик у произвольного QWidget Отправлено: GreatSnake от Июнь 20, 2011, 10:52 Вот вариант, работающий при компоновке любой сложности:
Код
Название: Re: Узнать компановщик у произвольного QWidget Отправлено: kim от Июнь 21, 2011, 13:10 да уже сделал :)
работает, вот что получилось: Код
Код
|