Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Ноября 30, 2014, 23:15



Название: Как отобразить QHBoxLayout в QScrollArea? (скрин и компилируемый семпл прилагаю)
Отправлено: xintrea от Ноября 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), то все корректно отображается:

(http://i.piccy.info/i9/d0296fc34b553ed2c76c95e7ec6ce81f/1417377690/13906/825956/scr_366.png)

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

Вопрос: как добавить текстовые метки в QHBoxLayout, размещенный в QScrollArea так, чтобы они были видны? Причем сделать это надо после размещения QHBoxLayout в QScrollArea.