@gibsonman01

Почему виджеты накладываются друг на друга?

CocomoWidget::CocomoWidget(QWidget* parent) : QWidget(parent) {
    auto scaleLabel = new QLabel("Размер проекта:", this);

    auto scaleSpinBox = new QSpinBox(this);
    scaleSpinBox->setRange(1, 1000000);
    scaleSpinBox->setSingleStep(10);
    scaleSpinBox->setValue(10);
    scaleSpinBox->setSuffix(" KLOC");

    auto scaleLayout = new QHBoxLayout(this);
    scaleLayout->addWidget(scaleLabel);
    scaleLayout->addWidget(scaleSpinBox);

    auto topLayout = new QVBoxLayout(this);
    topLayout->addLayout(scaleLayout);

    this->setLayout(topLayout);
}

Результат:
c8ee05926ee74bf392589cf8ea32556b.png
  • Вопрос задан
  • 824 просмотра
Решения вопроса 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Вот так работает. Глянь в консоль приложения, он там вероятно писал "QLayout: Attempting to add QLayout "" to CustomWidget "", which already has a layout", т.к. он поставился, когда ты указывал this в параметре конструктора.
auto scaleLabel = new QLabel("Размер проекта:", this);

    auto scaleSpinBox = new QSpinBox(this);
    scaleSpinBox->setRange(1, 1000000);
    scaleSpinBox->setSingleStep(10);
    scaleSpinBox->setValue(10);
    scaleSpinBox->setSuffix(" KLOC");

    auto scaleLayout = new QHBoxLayout;
    scaleLayout->addWidget(scaleLabel);
    scaleLayout->addWidget(scaleSpinBox);

    auto topLayout = new QVBoxLayout;
    topLayout->addLayout(scaleLayout);

    this->setLayout(topLayout);

P.S. для виджетов тоже можно не добавлять parent'а, т.к. addWidget вызывает addItem, который его добавит.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Вам нужен только один пустой Layout, в который засуньте остальные Layout.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы