Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Nub от Март 29, 2009, 13:04



Название: Перебрать все элементы слоя...
Отправлено: Nub от Март 29, 2009, 13:04
есть QVBoxLayout и на нем куча QLineEdit'ов, как их все перебрать циклом чтобы изменить некоторые свойста?


Название: Re: Перебрать все элементы слоя...
Отправлено: m_ax от Март 29, 2009, 13:24
Если лэйбелов, реально целая куча, то возможно правильнее будет организовать список QList на указатели этих объектов:

Код:
private:
...
    QList<QLabel *> m_arrLabels;
...

Затем в конструкторе вставляешь их в свой QVBoxLayout:
Код:
    QVBoxLayout *labelLayout = new QVBoxLayout;
    for (int i = 0; i < n; ++i)
    {
        QLabel *pl = new QLabel("...");
        m_arrLabels.append(pl);
        labelLayout->addWidget(pl);
    }   
Обращаться к i ому объекту можно так:
Код:
    m_arrLayout[i]->set.....
Ну дальше всё понятно, думаю...


Название: Re: Перебрать все элементы слоя...
Отправлено: Rcus от Март 29, 2009, 13:25
Итерация по QLayoutItem через QLayout::itemAt(), QLayout::count(), апкаст QLayoutItem::widget() при помощи qobject_cast?


Название: Re: Перебрать все элементы слоя...
Отправлено: m_ax от Март 29, 2009, 13:25
Ой, пардон, там же QlineEdit ы  ;D Ну это не принципиально


Название: Re: Перебрать все элементы слоя...
Отправлено: Sergey B. от Март 29, 2009, 13:51
Всё намного проще.

*.h

Код:
QList <QLineEdit *> m_list;

*.cpp

Код:
m_list = findChildren<QLineEdit *>();

А дальше обычный перебор списка с помощью итераторов.


Название: Re: Перебрать все элементы слоя...
Отправлено: Nub от Март 29, 2009, 14:56
m_list = findChildren<QLineEdit *>();
так работает но получает список всех QLineEdit'ов на виджете, а если делаю
m_list = ui->leLayout->findChildren<QLineEdit *>();
то получаю пустой список. :(