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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отобразить QHBoxLayout в QScrollArea? (скрин и компилируемый семпл прилагаю)  (Прочитано 1805 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Ноябрь 30, 2014, 23:15 »

Мне нужно разместить QHBoxLayout в QScrollArea.

Это нужно для того, чтобы если QHBoxLayout будет слишком широкий, он просто уезжал за границу окна и не растягивал окно во всю ширину.

Я пользуюсь таким кодом:

Код:
#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QScrollArea>
#include <QPalette>
#include <QSizePolicy>
#include <QString>
#include <QLabel>

int main(int argc, char *argv[])
{
 QApplication app(argc, argv);

 QWidget *recordTagsContainer;
 QHBoxLayout *recordTagsLayout;
 QScrollArea *recordTagsScrollArea;
 
 QLabel *label1=new QLabel("Label1");
 QLabel *label2=new QLabel("Label2");
 QLabel *label3=new QLabel("Label3");
 
 // Область текстовых меток, которые выглядят на экране как [метка1] [метка2] [метка3] ...
 recordTagsLayout=new QHBoxLayout();
 recordTagsLayout->setAlignment(Qt::AlignLeft);
 // !!! Место для добавления текстовых меток !!!
 
 // QHBoxLayout невозможно добавить в QScrollArea, поэтому оборачивается в виджет
 recordTagsContainer = new QWidget();
 recordTagsContainer->setBackgroundRole(QPalette::Dark);
 recordTagsContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 recordTagsContainer->setLayout(recordTagsLayout);

 // Создается QScrollArea и в нее добавляется виджет с QHBoxLayout
 recordTagsScrollArea=new QScrollArea();
 recordTagsScrollArea->setWidget(recordTagsContainer);
 
 // Добавление текстовых меток
 recordTagsLayout->addWidget(label1);
 recordTagsLayout->addWidget(label2);
 recordTagsLayout->addWidget(label3);

 recordTagsScrollArea->show();
 return app.exec();
}

В этом примере добавление текстовых меток происходит ближе к концу кода. И этот пример НЕ показывает текст "Label1 Label2 Label3"!

А если перенести добавление текстовых меток в область строки, обозначенную в коде как "!!! Место для добавления текстовых меток !!!" (то есть, сразу после создания QHBoxLayout), то все корректно отображается:



Но у меня программа должна сначала создавать интерфейс: основные виджеты, слои, области прокрутки. И только потом динамически добавлять/удалять эти самые текстовые метки.

Вопрос: как добавить текстовые метки в QHBoxLayout, размещенный в QScrollArea так, чтобы они были видны? Причем сделать это надо после размещения QHBoxLayout в QScrollArea.
« Последнее редактирование: Ноябрь 30, 2014, 23:19 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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