2017-09-24 182 views
0

我想要均勻地填充正在使用的iconMode中的QListWidget的視口來獲取物品的網格佈局。如何調整QListWidget的gridSize以使項目均勻填充viewPort?

一切工作正常,但問題是調整mainWindow時,listWidget等待獲取寬度,使行中的新項目可以獲得空間。顯示在下面的圖片: am getting this type of behaviour by QListWidget

並期待這樣的: enter image description here

這是我試過到目前爲止

void MainWindow::resizeEvent(QResizeEvent* event) 
    { 
    if(ui->listWidget->count()>0){ 
     float items_that_can_fill_view = ui->listWidget->width() /(330+ui->listWidget->spacing()); 
     float total_width_of_items = items_that_can_fill_view*330; 
     float remaining_width = ui->listWidget->width()-total_width_of_items; 
     float evenly_distributed_width = remaining_width/items_that_can_fill_view; 
     ui->listWidget->setGridSize(QSize(330+evenly_distributed_width,ui->listWidget->item(0)->sizeHint().height())); 
    } 
    event->accept(); 
    } 

在上面的代碼通過調整在應用程序運行時我改變了gridSize mainWindow的寬度。我選擇了float而不是int類型來非常精確地進行更改。 330也是listWidget中每個項目的寬度。
請幫忙。
我正在使用Qt 5.8。

+0

你想舒展從圖1中兩列,以填補整個寬度或添加第三列如圖2所示那樣裁剪?還是你想調整窗口的大小以適應上一句中描述的2個現有列的寬度? – SteakOverflow

+0

我想把這個空白寬度分割成listview的網格大小。 –

+0

記住網格大小和項目大小是不同的。 –

回答

1

通過將listWidget的寬度替換爲其視口的寬度,我獲得了期望的結果。下面的代碼使得網格均勻地覆蓋整個視圖:

if(ui->listWidget->count()>0){ 
     float i = ui->listWidget->viewport()->width() /(330+ui->listWidget->spacing()); 
     float iw = i*330; 
     float r = ui->listWidget->viewport()->width()-iw; 
     float even_dist_w = (r/i)-5; 
     ui->listWidget->setGridSize(QSize(330+even_dist_w,162)); 
    } 

其中,

I =項視圖可以水平顯示的總數;

iw =所有項目(i)的總寬度;

r =繪製項目後留在視圖中的剩餘空間;

even_dist_w =要添加到gridSize的空間;

最後我們將gridSize設置爲listWidget。 這導致像下面一個觀點:(檢查空間cloumns之間均勻分佈)

enter image description here