2017-09-24 179 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