Russian Qt Forum
Ноябрь 25, 2024, 00:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пробежать по созданным виджетам  (Прочитано 2338 раз)
bestonix
Гость
« : Февраль 25, 2011, 11:56 »

Доброго здоровья уважаемые.

Прошу принять новичка в свои ряды. До сего момента программировал на С++Builder.
Теперь озаботился кросс-программированием. Нашел для себя, что Qt подходящая для
этой цели система. Начал писать программу чтобы в реале учиться.
На виджете QFrame динамически создаю компоненты. Количество компонентов зависит от
установленного значения в QSpinBox. Когда значение меняется, то нужно "пробежаться" по всем компонентам на Frame
и удалить их. Затем заново создать новые.

Вот и вопрос каким образом осуществить такую задачу ?
В С++Builder'е использовал бы свойство ControlCount у компоненты на которой размещены созданные мною и
удалял все "лишнее".
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Февраль 25, 2011, 11:59 »

QList<T> QObject::findChildren ( const QString & name = QString() ) const

PS. если пользуешься компоновщиком, то достаточно удалить компоновщик.
« Последнее редактирование: Февраль 25, 2011, 12:10 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
bestonix
Гость
« Ответ #2 : Февраль 25, 2011, 13:22 »

Процесс создания делаю таким образом:
Код:
uMain::uMain(QWidget *pwgt) : QWidget(pwgt)
{
    ............
    QScrollArea *sArea = new QScrollArea(pwgt);
    QVBoxLayout *pvbxLayout1 = new QVBoxLayout(sArea);
    qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));

    for (int i=0; i<psbThread->value(); i++) {
      QSpinBox *psbArea = new QSpinBox(pwgt);
      psbArea->setObjectName("TimeStartThread_"+QString::number(i+1));
      QLabel *plblPeriod = new QLabel(QTextCodec::codecForName("Windows-1251")->toUnicode("Периодичность запуска потока ")+QString::number(i+1));

      QLineEdit *pleArea = new QLineEdit;
      pleArea->setObjectName("LineEditThread_"+QString::number(i+1));
      QLabel *plblArea   = new QLabel(QTextCodec::codecForName("Windows-1251")->toUnicode("Сообщение для потока ")+QString::number(i+1));
      plblArea->setBuddy(pleArea);

      QComboBox *pcbPriority = new QComboBox;
      pcbPriority->setObjectName("Priority_"+QString::number(i+1));
      pcbPriority->addItems(QStringList() << "Info" << "Warning" << "Critical");
      pcbPriority->setCurrentIndex(qrand()%3);
      QLabel *plblPriority   = new QLabel(QTextCodec::codecForName("Windows-1251")->toUnicode("Приоритет для потока ")+QString::number(i+1));
      plblPriority->setBuddy(pcbPriority);

      QHBoxLayout *phbxLayout5 = new QHBoxLayout;
      phbxLayout5->addWidget(plblPeriod);
      phbxLayout5->addWidget(psbArea);
      phbxLayout5->addWidget(plblArea);
      phbxLayout5->addWidget(pleArea);
      phbxLayout5->addWidget(plblPriority);
      phbxLayout5->addWidget(pcbPriority);
      phbxLayout5->addStretch(1);

      pvbxLayout1->addLayout(phbxLayout5);
    }
    QWidget *pwgtBox = new QFrame(this);
    pwgtBox->setLayout(pvbxLayout1);
    sArea->setWidget(pwgtBox);

    QVBoxLayout *pvbxLayout = new QVBoxLayout();
    pvbxLayout->addLayout(phbxLayout1);
    pvbxLayout->addLayout(phbxLayout2);
    pvbxLayout->addLayout(phbxLayout3);
    pvbxLayout->addLayout(phbxLayout4);
    pvbxLayout->addWidget(sArea);

    setLayout(pvbxLayout);
}
Записан
bestonix
Гость
« Ответ #3 : Февраль 25, 2011, 16:48 »

QList<T> QObject::findChildren ( const QString & name = QString() ) const

PS. если пользуешься компоновщиком, то достаточно удалить компоновщик.

Большое спасибо. Разобрался что к чему. Работает как положено
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.058 секунд. Запросов: 23.