2012-10-14 67 views
0

我的目標是動態創建一個命令鏈接按鈕數組,然後將它們全部顯示在QscrollArea內的垂直佈局中。我從數據庫中獲取按鈕的數據。爲此,我爲該按鈕創建了一個插槽,並在插槽功能中寫入了以下代碼。在QScrollArea中動態創建和顯示按鈕陣列

QCommandLinkButton *slotButtons[10]; 
for(int i=0; slotQuery.next(); i++) 
{ 
    slotButtons[i] = new QCommandLinkButton; 
    slotButtons[i]->setText(slotQuery.value(0).toString()); 
    slotButtons[i]->setDescription(slotQuery.value(1).toString()); 


    ui->scrollAreaSlots->layout()->addWidget(slotButtons[i]); 
    ui->scrollAreaSlots->show(); 
    slotButtons[i]->show(); 


} 

這個編譯沒有錯誤,但即使在調用show之後按鈕也是不可見的。 任何人都可以告訴我我要去哪裏嗎?

更新:如果我刪除所有「[i]」並評論循環;基本上只創建一個命令鏈接按鈕,它完美的工作。但它不適用於循環。一切正常與我的循環?

回答

1

QScrollArea有一個可包含其他小部件的子小部件。

當使用Qt Creator的UI設計器創建QScrollArea小部件時,Qt Creator會自動創建一個名爲scrollAreaWidgetContents的小部件。然後將按鈕添加到該窗口小部件的佈局中,該佈局不會自動創建。佈局創建在下面的代碼中也添加按鈕:

QCommandLinkButton *slotButtons[10]; 
QVBoxLayout* layout = new QVBoxLayout(ui->scrollAreaWidgetContents); 
for(int i=0; slotQuery.next(); i++) 
{ 
    slotButtons[i] = new QCommandLinkButton; 
    slotButtons[i]->setText(slotQuery.value(0).toString()); 
    slotButtons[i]->setDescription(slotQuery.value(1).toString()); 
    ui->scrollAreaWidgetContents->layout()->addWidget(slotButtons[i]); 
} 
+0

是的,這個工作!謝謝! – Airmine

0

嘗試添加以下行(添加按鈕滾動區域前)

slotButtons[i]->setVisible(true); 

這應該確保按鈕本身,當你把它添加到雙擊自動滾屏區域可見。

+0

謝謝,但沒有奏效。另外,不要設置可見和顯示做同樣的事情? – Airmine

+0

你是對的,它們是等價的。 – rpsml