如何调整QListWidget的gridSize大小以使项目均匀填充viewPort?

时间:2017-09-24 14:59:35

标签: c++ qt qt5 qlistwidget qlistwidgetitem

我想在QListWidget中均匀填充视口,我在iconMode中使用它来获取item的网格布局。

一切正常但问题是当调整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();
   }

在上面的代码中,我通过调整mainWindow的宽度来改变app运行时的gridSize。我选择float而不是int作为类型来非常精确地进行更改。 330也是listWidget中每个项目的宽度 请帮忙。
我使用的是Qt 5.8。

1 个答案:

答案 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