2010-10-03 32 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) – 2010-10-03 15:13:31

+0

感謝斯特凡.. – Finder 2010-10-03 15:16:47

+0

後修改的源 - 你目前的片段顯然是不全面(例如沒有SetTableContent實現,該模型沒有在searchTable上設置)。只有當有人能夠幫助你。 – chalup 2010-10-03 15:47:50

回答

6

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

如果已經有一個佈局管理器安裝在這個小部件上,QWidget不會讓你安裝另一個。您必須先刪除現有佈局管理器(由layout()返回),然後才能使用新佈局調用setLayout()。

+0

如何找到已安裝的佈局管理器?你能告訴我嗎? – Finder 2010-10-03 16:10:02

+0

感謝Ronny ......我明白了......我用qDeleteAll(myQWidget-> children()); – Finder 2010-10-03 16:32:21

+1

我想測試layout()!= 0是否足夠 – 2010-10-04 01:45:30