LINUX.ORG.RU

Не переносится контент layout

 


0

1

// Конструктор потомка QWidget'a
    QHBoxLayout * layout = new QHBoxLayout();

// plotzone - qwidget
    plotzone.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    layout->addWidget(&plotzone);
    layout->addWidget(&mpanel, Qt::AlignRight);
    layout->setMargin(0);

    this->setLayout(layout);

    QPalette Pal(palette());
    Pal.setColor(QPalette::Background, Qt::blue);
    setAutoFillBackground(true);
    setPalette(Pal);

Скриншот: http://i58.tinypic.com/34y32xk.png

Панелька должна привязаться к правому краю, а все остальное место должен занимать plotzone. Почему не так и как исправить?

Сам потомок QWidget'а растянут на все окно - проверено назначением цвета.

★★

Последнее исправление: sambist (всего исправлений: 1)

Можно использовать stretch для растяжения нужных виджетов

layout->addWidget(&plotzone, 4 );

виджеты будут растягиваться в соответствие со заданными stretch.

Кстати, из какого Qt вот это,

layout->addWidget(&mpanel, Qt::AlignRight);

в 4.8 там 3 параметра и второй из них как раз stretch:

void QBoxLayout::addWidget ( QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0 )

grondek
()
Ответ на: комментарий от sambist

Далее вопрос

this->setLayout(layout);

this - это какой виджет? QMainWindow::centralWidget?

Судя по скриншоту, у тебя layout не растянут на всю ширину большого виджета.

И, кстати, alignment - это не совсем то что ты думаешь - это размещение виджета в ячейке layout'а, а не прижатие его к правой стороне родителя.

grondek
()
Ответ на: комментарий от panter_dsd

Это весь код, который отвечает за компоновку.

sambist ★★
() автор топика
Ответ на: комментарий от grondek

his - это какой виджет? QMainWindow::centralWidget?

// Конструктор потомка QWidget'a

    QHBoxLayout * layout = new QHBoxLayout();

    plotzone.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    layout->addWidget(&plotzone, 4);
    layout->addWidget(&mpanel, Qt::AlignRight);
    layout->setMargin(0);

    this->setLayout(layout);

    QPalette Pal(palette());
    Pal.setColor(QPalette::Background, Qt::blue);
    setAutoFillBackground(true);
    setPalette(Pal);
QMainWindow mw;

    NPlotWidget nplot(16);

    mw.setMinimumSize(600, 600);
    mw.setCentralWidget(&nplot);

    mw.show();
sambist ★★
() автор топика
Ответ на: комментарий от grondek

это размещение виджета в ячейке layout'а, а не прижатие его к правой стороне родителя.

Ок, если layout растяется на весб виджет - будет то, что надо.

sambist ★★
() автор топика
#include <QApplication>

#include <QWidget>
#include <QHBoxLayout>

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

    QWidget* w1 = new QWidget();
    QWidget* w2 = new QWidget();
    QWidget* w3 = new QWidget();

    w1->setStyleSheet("background-color:red;");
    w2->setStyleSheet("background-color:green;");
    w3->setStyleSheet("background-color:blue;");

    QHBoxLayout *lay = new QHBoxLayout();
    w1->setLayout(lay);
    lay->addWidget(w2);
    lay->addWidget(w3);

    w3->setMinimumSize(100,0);
    w3->setMaximumSize(100,QWIDGETSIZE_MAX);

    w1->show();

    return a.exec();
}
anonymous
()
Ответ на: комментарий от sambist

Ну и вопрос: а зачем все размещение руками делать? Есть же дизайнер.

grondek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.