Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание компонентов 
V
    Опции темы
HomerJSimpsoN
  Дата 5.2.2012, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.2.2012

Репутация: нет
Всего: нет



Суть вопроса следующая:

В БД хранится таблица, которая описывает количество полей, их заголовок и имя на форме.
Есть форма. Точнее - формы нет. Она создается динамически.
На эту форму посредством setLayout() я кладу QVBoxLayout. Далее на него начинаю класть с помощью addWidget() предварительно созданный компонент в соответствии с описанием в БД.
К сожалению этот компонент не появляется и выводится чистая формочка.
Привожу текст процедуры
Код

QDialog *PatientDialog::CreateDialog(QString tabName)
{
    // Генерируем диалог создания карточки пациента
    QWidget *w = new QWidget();
    QDialog *d = new QDialog(w);

    QSizePolicy sizePolicy;
    sizePolicy.setVerticalPolicy(QSizePolicy::Policy::Fixed);
    sizePolicy.setHorizontalPolicy(QSizePolicy::Policy::Fixed);

    d->setSizePolicy(sizePolicy);

    d->setGeometry(100, 100, 800, 600);

    QScrollBar *scrollBar = new QScrollBar(Qt::Orientation::Vertical, w);

    QVBoxLayout *l = new QVBoxLayout(w);

    QFont font;
    font.setPointSize(10);

    int x = 10, y = 10;

    // Теперь запросим все нужные поля для данного диалога
    dbaseQuery->exec("SELECT a.FieldText, a.FieldType, a.FieldName FROM"
                     " TableDescription a WHERE a.TableName='" + tabName + "';");

    while( dbaseQuery->next() )
    {
        // Создадим поле
        // с именем - именем колонки,
        // и поместим его на форму

        // Сначала создадим надпись
        QLabel *label = new QLabel(w);
        label->setFont(font);
        label->setText(dbaseQuery->value(0).toString());
        label->update();
        label->setVisible(true);
        l->addWidget(label);
        l->update();
    }

    w->setLayout(l);
    return d;
}

Я явно что то упускаю. 
Прошу помощи =)
Заранее спасибо!
PM MAIL   Вверх
HomerJSimpsoN
Дата 5.2.2012, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.2.2012

Репутация: нет
Всего: нет



Хммм))
Ответ - найден. Там нужно вызывать дополнительно метод show() к главному виджету окна.
Появился другой вопрос из этой же оперы =)

У меня динамически создается форма, туда закидывается некоторое число компонентов.
Это число, с одной стороны, может быть достаточно велико, посему, чтобы избежать наложения их друг на друга, я создаю скролл бар. 
С другой стороны - это число может быть и 1 - 2. Размер формы - не важен, т.е. тоже от очень небольшой, до всего экрана.
На данный момент я создал QHBoxLayout, засунул туда справа скролл бар, а слева - QVBoxLayout. В последний - пихаю компоненты.
Как сами понимаете, получается не очень красиво.
Посему прошу подсказать, какой компонент-компоновщик лучше использовать для этого дела... Чтоб его еще и можно было привязать к скролл бару и скроллить вниз-вверх к недуступным объектам...
Желательно подсказать, как еще и привязку осуществить ^_^
Спасибо!
PM MAIL   Вверх
_GRIN_
Дата 6.2.2012, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Убери свой скролбар.
Изначальный компонент запихни в QScrollArea


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
HomerJSimpsoN
Дата 6.2.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.2.2012

Репутация: нет
Всего: нет



Спасибо.
Проблему решил, буквально минут 15 назад...
Всего лишь навсего забыл изменить размер слоя, на который кладу элементы =)
Глупо =(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.