Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Евгений от Июль 28, 2013, 09:55



Название: Добавление layout`ов
Отправлено: Евгений от Июль 28, 2013, 09:55
Есть простое диалоговое окно. Решил при клике по кнопке давить в окно layout с виджетами. Но компилятор ругается. Есть возможность добавлять layout`ы вне конструктора?

 
Код:
#include "dialog.h"
#include "ui_dialog.h"
#include "mytask.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    QHBoxLayout *nTask = new QHBoxLayout(this);
    QPushButton *start = new QPushButton("start",this);
    QPushButton *cancel = new QPushButton("cancel",this);
    QPushButton *pause = new QPushButton("pause",this);
    nTask->addWidget(start);
    nTask->addWidget(cancel);
    nTask->addWidget(pause);
    layout()->addItem(nTask);



}

Dialog::~Dialog()
{
    delete ui;
}


void Dialog::on_pushButton_clicked()
{
    QHBoxLayout *mTask = new QHBoxLayout(this);
    QPushButton *start2 = new QPushButton("start 2",this);
    QPushButton *cancel2 = new QPushButton("cancel 2",this);
    mTask->addWidget(start2);
    mTask->addWidget(cancel2);
    layout()->addItem(mTask);

}


Название: Re: Добавление layout`ов
Отправлено: gil9red от Июль 28, 2013, 11:38
У вас layout вообще к виджету прикреплен? :)
Попробуйте в конструкторе перед layout() прописать, например,
Код:
setLayout(new QHBoxLayout());
Потому что по дэфолту у виджета нет компоновщика (layout) и его нужно сначало добавить


Название: Re: Добавление layout`ов
Отправлено: Bepec от Июль 28, 2013, 12:04
Тоже встречал данную проблему. По умолчанию там есть layout. Но невнятный. Сменить его в рантайме - я такого не нашёл. Плюнул и переделал архитектуру.


Название: Re: Добавление layout`ов
Отправлено: Majestio от Июль 29, 2013, 22:42
Есть простое диалоговое окно. Решил при клике по кнопке давить в окно layout с виджетами. Но компилятор ругается. Есть возможность добавлять layout`ы вне конструктора?
Смотри примерчик в аттаче.