2017-09-24 9 views
0

iconModeで使用しているQListWidgetのビューポートを均等に塗りつぶして、アイテムのグリッドレイアウトを取得したいとします。QListWidgetのgridSizeのサイズを変更してアイテムをviewPortに均等に塗りつぶす方法は?

すべて問題なく動作しますが、問題は、mainWindowのサイズを変更するときに、リストウィジェットが幅を取得するのを待っているため、行の新しい項目が領域を確保できることです。下の画像に示されている: 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の幅int型の代わりに浮動小数点型を型として選択し、非常に正確に変更しました。また、330はlistWidgetの各項目の幅です。
助けてください。
私はQt 5.8を使用しています。

+0

あなたが全体の幅を埋めるか、第3列を追加するために図1から2つの列を伸ばすしようとしていますそれは図2のように切り取られていますか?または、最後の文で説明した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

関連する問題