如何调整 QListWidget 的 gridSize 以使项目均匀填充视口?
How to Resize QListWidget's gridSize to make items fill the viewPort evenly?
我想均匀地填充在 iconMode 中使用的 QListWidget 的视口以获得项目的网格布局。
一切正常,但问题是在调整主窗口大小时,listWidget 等待获取宽度,以便行中的新项目可以获得 space。如下图所示:
期待这样的:
这是我到目前为止尝试过的
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。
通过将 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 = 绘制项目后视图中剩余 space;
even_dist_w = space 即要加入gridSize;
最后我们将gridSize设置为listWidget。
这导致如下视图:(检查 space 在 cloumns 中均匀分布)
我想均匀地填充在 iconMode 中使用的 QListWidget 的视口以获得项目的网格布局。
一切正常,但问题是在调整主窗口大小时,listWidget 等待获取宽度,以便行中的新项目可以获得 space。如下图所示:
期待这样的:
这是我到目前为止尝试过的
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。
通过将 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 = 绘制项目后视图中剩余 space;
even_dist_w = space 即要加入gridSize;
最后我们将gridSize设置为listWidget。 这导致如下视图:(检查 space 在 cloumns 中均匀分布)