【问题标题】:How to Resize QListWidget's gridSize to make items fill the viewPort evenly?如何调整 QListWidget 的 gridSize 以使项目均匀地填充视口?
【发布时间】:2017-09-24 14:59:34
【问题描述】:

我想均匀地填充在 iconMode 中使用的 QListWidget 的视口,以获取项目的网格布局。

一切正常,但问题是当调整 mainWindow 的大小时,listWidget 等待获取宽度,因此行中的新项目可以获得空间。如下图所示:

期待这个:

这是我迄今为止尝试过的

   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 的宽度来更改 gridSize。我选择 float 而不是 int 作为类型来非常精确地进行更改。 330 也是 listWidget 中每个项目的宽度。
请帮忙。
我正在使用 Qt 5.8。

【问题讨论】:

  • 您是想从图 1 中拉伸两列以填充整个宽度,还是添加如图 2 所示裁剪的第三列?还是您想调整窗口大小以适应上一句中描述的 2 个现有列的宽度?
  • 我想将该空白宽度划分为列表视图的网格大小。
  • 记住gridsize和item size是不同的。

标签: c++ qt qt5 qlistwidget qlistwidgetitem


【解决方案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。 这会产生如下视图:(检查空间是否均匀​​分布在各列中)

【讨论】:

    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 2016-02-26
    • 2011-10-31
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多