我想在QListWidget中均匀填充视口,我在iconMode中使用它来获取item的网格布局。
一切正常但问题是当调整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的宽度来改变app运行时的gridSize。我选择float而不是int作为类型来非常精确地进行更改。 330也是listWidget中每个项目的宽度
请帮忙。
我使用的是Qt 5.8。
答案 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中)