Ошибка QWidget::setLayout: попытка установить QLayout [], у которого уже есть макет

При выполнении (без ошибки компиляции) я попадаю в консоль

QWidget::setLayout: Попытка установить QLayout "" на CGSearchResult "", у которого уже есть макет

Я использую следующий код:

CGSearchResult::CGSearchResult(QWidget *parent) : QWidget(parent)
{

    initControls();
    SetTableContent();

}

void CGSearchResult::initControls()
{


   backButton = new QPushButton(tr("&Back"));
   connect(backButton, SIGNAL(clicked()), this, SLOT(showHome()));

   model=new QStandardItemModel();


         QWidget::setFont(QFont("Courier New", 8, QFont::Bold));

        searchTable = new QTableView(this);
        searchTable->showGrid();

        searchTable->resize(720,400);
        searchTable->horizontalHeader()->setDefaultSectionSize(170);
        searchTable->verticalHeader()->setDefaultSectionSize(50);
        searchTable->verticalHeader()->hide();
        searchTable->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
        searchTable->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);


    QGridLayout *layout = new QGridLayout();
    layout->addWidget(backButton, 0, 0, 1, 1);
    layout->addWidget(searchTable, 2, 0, 1, 1);

    setLayout(layout);


}

person Finder    schedule 03.10.2010    source источник
comment
пожалуйста, исправьте форматирование вашего кода (сделав отступ с 4 пробелами - для этого выберите свой код и нажмите ctrl-K)   -  person Stefan Monov    schedule 03.10.2010
comment
Опубликовать немодифицированный источник — представленный фрагмент явно неполный (например, нет реализации SetTableContent, модель не задана в searchTable). Только тогда кто-то сможет вам помочь.   -  person chalup    schedule 03.10.2010
comment
На самом деле, Чалуп, я реализовал метод setModel в методе SetTableContent. Еще одна вещь, которую этот виджет вызывает из другого класса (QMainWindow).   -  person Finder    schedule 03.10.2010


Ответы (1)


http://qt-project.org/doc/qt-4.8/qwidget.html#setLayout

Если на этом виджете уже установлен менеджер компоновки, QWidget не позволит вам установить другой. Вы должны сначала удалить существующий менеджер компоновки (возвращенный layout()), прежде чем вы сможете вызвать setLayout() с новой компоновкой.

person Ronny Brendel    schedule 03.10.2010
comment
Как узнать уже установленный менеджер раскладок или нет? Не могли бы вы рассказать мне? - person Finder; 03.10.2010
comment
Спасибо, Ронни... Я понял... Я использовал qDeleteAll(myQWidget-›children()); - person Finder; 03.10.2010
comment
Я думаю, достаточно проверить, достаточно ли layout() != 0 - person Ronny Brendel; 04.10.2010