2017-09-24 17 views
0

iconMode에서 항목의 격자 레이아웃을 가져 오는 QListWidget의 뷰포트를 고르게 채 웁니다.QListWidget의 gridSize의 크기를 조정하여 항목을 viewPort에 균등하게 채우는 방법은 무엇입니까?

모든 것이 잘 작동하지만 문제는 행의 새 항목이 공간을 확보 할 수 있도록 listWidget이 너비를 확보하기를 기다리는 것입니다. 아래 그림 : am getting this type of behaviour by QListWidget

그리고이 기대 : enter image description here

이 내가 크기를 조정하여 응용 프로그램의 런타임에 gridSize을 변경하고 위의 코드에서 지금까지

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의 너비. 나는 매우 정확하게 변경하기 위해 int 대신 float를 선택했습니다. 또한 330은 listWidget의 각 항목의 너비입니다.
도와주세요.
Qt 5.8을 사용하고 있습니다.

+0

는 전체 폭을 채우거나 제 3의 열을 추가하기 위해 그림 1에서 두 개의 열을 스트레칭하려고 그림 2와 같이 자른 것입니까? 또는 마지막 문장에서 설명한 것처럼 기존의 두 열의 너비에 맞게 창 크기를 조정 하시겠습니까? – SteakOverflow

+0

그 빈 너비를 listview의 gridsize로 나누고 싶습니다. –

+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