Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Ручное применение компоновщиков

Автор: AD 25.6.2008, 15:59

Не очень понимаю, в чем ошибка кода? Размер полосы прокрутки и ее местоположение, совсем не те, что я задаю вот в этом коде:

/// Создание полосы загрузки файлов
void TLV::createProgressBar()
{
    dockProgress = new QDockWidget(this);
    dockProgress -> setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
    dockProgress -> setAllowedAreas(Qt::BottomDockWidgetArea);
    dockProgress -> setGeometry(x(), height() - 40, width() - 20, 80);
    
    h_layout = new QHBoxLayout(dockWidget);
    h_layout -> setSpacing(6);
    h_layout -> setMargin(11);
    h_layout -> setContentsMargins(0, 0, 0, 0);

    QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(dockProgress -> sizePolicy().hasHeightForWidth());

    progressBar = new QProgressBar(dockProgress);
    progressBar -> setSizePolicy(sizePolicy);
    progressBar -> setBaseSize(QSize(dockProgress -> width(), 23));
    h_layout -> addWidget(progressBar);
    //progressBar -> setGeometry(5, 30, dockProgress -> width(), 23);
}


сможете помочь?

Автор: AD 25.6.2008, 17:56

Пример сделан подобно тому, что делал генератор QtDesigner, но данный кусок кода не работает!
:unsure:

Автор: Litkevich Yuriy 25.6.2008, 18:02

а что получается, т.е. чем отличается поведение ожидаесое от реального?

Автор: AD 25.6.2008, 18:10

Цитата(Litkevich Yuriy @ 25.6.2008, 19:02) *
а что получается, т.е. чем отличается поведение ожидаесое от реального?

да... минимальных размеров, т.е. тех, которые заданы по-умолчанию для полосы прокрутки получаются, а еще эта полоса прокрутки залезает на синюю панель прикрепляемого виджета.

Автор: AD 26.6.2008, 11:21

надоело мучиться, поэтому проблему решил следующим образом: отказался от прикрепляемого виджета, вставляю просто полосу прокрутки. А здесь применение компоновщика работает в полной мере!

P.S. тему можно закрыть

Автор: Litkevich Yuriy 26.6.2008, 16:29

закрывать не буду - задача не решена. когда-нибудь к ней вернемся

Автор: AD 26.6.2008, 16:56

Цитата
закрывать не буду - задача не решена.

Да не... :) Решена. Тестовый пример путем шаманства и черной магии удался, перенесу в свое приложение, покажу код!

Вот так выглядит решение ручной компоновки с помощью прикрепляемого виджета:
// Создание полосы загрузки файлов
void TLV::createProgressBar()
{
    v_layout = new QVBoxLayout;
    dockProgress = new QDockWidget(this);
    dockProgress -> setObjectName(QString::fromUtf8("dockProgress"));
    QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(dockProgress -> sizePolicy().hasHeightForWidth());
    dockProgress -> setSizePolicy(sizePolicy);
    dockProgress -> setMinimumSize(QSize(50, 150));
    dockProgress -> setBaseSize(QSize(300, 150));

    QWidget* dockWidgetContents = new QWidget(dockProgress);
    QVBoxLayout* v_layout2 = new QVBoxLayout(dockWidgetContents);
    v_layout2 -> setContentsMargins(0, 0, 0, 0);

    progressBar = new QProgressBar(dockWidgetContents);
    progressBar -> setObjectName(QString::fromUtf8("progressBar"));
    progressBar -> setMinimumSize(QSize(20, 20));

    v_layout2 -> addWidget(progressBar);
    dockProgress -> setWidget(dockWidgetContents);
    v_layout -> addWidget(dockProgress);

    gridLayout -> addLayout(v_layout, 1, 0, 2, 2);
}




P.S. dockWidget - опечатка!

Автор: Litkevich Yuriy 26.6.2008, 17:08

А класс TLV, от кого произошел?
и кто такой dockWidget, он где объявлен?

Автор: AD 26.6.2008, 17:31

Цитата(Litkevich Yuriy @ 26.6.2008, 18:08) *
А класс TLV, от кого произошел?
и кто такой dockWidget, он где объявлен?

TLV - потомок QMainWindow;
dockProgress - QDockWidget;
progressBar - QProgressBar.

Автор: Litkevich Yuriy 26.6.2008, 17:33

а dockWidget?

Автор: AD 30.6.2008, 10:19

Администраторы и модераторы, закройте, пожалуйста, тему - вопрос решен, решение выложено! Недочеты исправлены.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)