2010-10-03 4 views
3

Об исполнении (без ошибок компиляции) я получаю на консоли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); 


} 
+0

пожалуйста исправить форматирование коды (углубленный все это с 4 пробелов - чтобы сделать это, выберите код и нажмите Ctrl-K) –

+0

Спасибо Stefan .. – Finder

+0

сообщения неизмененного источник - фрагмент вы представить, очевидно, неполный (например, нет реализации SetTableContent, модель не задана в searchTable). Только тогда кто-то сможет вам помочь. – chalup

ответ

6

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

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

+0

Как найти укладчик макета уже установлен или нет? Не могли бы вы рассказать мне? – Finder

+0

Спасибо, Ронни ... Я понял. Я использовал qDeleteAll (myQWidget-> children()); – Finder

+1

Я думаю, что проверка правильности макета()! = 0 –

 Смежные вопросы

  • Нет связанных вопросов^_^