Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Astrologer от Сентябрь 13, 2010, 10:11



Название: Проблемы c setLayout()
Отправлено: Astrologer от Сентябрь 13, 2010, 10:11
Всем привет. У меня есть MainWindow и класс QdbfReader наследующий от QWidget.
Mainwindow.cpp
Код:
 QDbfReader* reader = new QDbfReader(this);
 setCentralWidget(reader);
А в коде QdbReader'a я добавляю layouts.
Код:
void QDbfReader::addWidgets()
{
    view = new QTableView(this);
    mainLayout = new QHBoxLayout(this);
    verticalLayout = new QVBoxLayout(this);
    button = new QPushButton(this);
    list_widget = new QListWidget(this);

    button->setText("SQL");

    view->setModel(model);//bind model to the viewer

    view->resizeColumnsToContents();
    view->resizeRowsToContents();

    for (int i = 0; i < DBFlist.count(); i++)
        list_widget->addItem(QString::number(i) + " . " + DBFlist[i]);

    list_widget->setWordWrap(true);

    verticalLayout->addWidget(view);
    verticalLayout->addWidget(list_widget);

    mainLayout->addLayout(verticalLayout);
    mainLayout->addWidget(button);
    setLayout(mainLayout);
}

Однако выводится предупреждение -
QLayout: Attempting to add QLayout "" to QDbfReader "", which already has a layout

И иногда(!) форма не отображается. Что я делаю не так? Всем заранее спасибо.


Название: Re: Проблемы c setLayout()
Отправлено: GreatSnake от Сентябрь 13, 2010, 10:15
Код
C++ (Qt)
   mainLayout = new QHBoxLayout(this);
   verticalLayout = new QVBoxLayout(this);
 

На QdbfReader вешаете 2 layout-a....


Название: Re: Проблемы c setLayout()
Отправлено: Astrologer от Сентябрь 13, 2010, 10:16
А как же сделать? Мне нужно раскомпоновать несколько layouts?


Название: Re: Проблемы c setLayout()
Отправлено: GreatSnake от Сентябрь 13, 2010, 10:19
verticalLayout = new QVBoxLayout();


Название: Re: Проблемы c setLayout()
Отправлено: Пантер от Сентябрь 13, 2010, 10:19
У лайотов парента не указывай.


Название: Re: Проблемы c setLayout()
Отправлено: alexeysun от Сентябрь 13, 2010, 12:31
У лайотов парента не указывай.

Родитель нужен только у базового лэйоута (в твоем случае mainLayout), собственно тем самым ты даешь управление окном этому лэйоуту.


Название: Re: Проблемы c setLayout()
Отправлено: petro_xmara от Декабрь 30, 2010, 12:07
а как можно во время работы программы менять layout у одного виджета?

Код
C++ (Qt)
if(name=="main")
   {
       setLayout(mainLayout);
   }
   else if(name=="second")
   {
       setLayout(secondLayout);
   }
 

так выдает ошибку

QWidget::setLayout: Attempting to set QLayout "" on bdialog "", which already has a layout


Название: Re: Проблемы c setLayout()
Отправлено: Fat-Zer от Декабрь 30, 2010, 13:35
QStackedLayout вам в помощь...