Automatyczna zmiana szerokości kolumn

Automatyczna zmiana szerokości kolumn
mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Mam problem a mianowicie mam QTreeView jak w załączniku i chciałbym zrobić aby rozmiary szerokości kolumn same się dopasowywały podczas rozciągania okna z tym, że 1 i 3(ostatnia) kolumna mają zawsze taki sam rozmiar a poszerza się tylko środkowa część, no i nie mam planu jak to zrobić :D

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

Toć to żadna filozofia...ot reimplementacja resizeEventu widoku.Jedyny myk jaki należy znać to pobieranie szerokości dostępnego miejsca-robi się to poprzez viewport()->width().Mając tą wielkość bez problemu wyliczasz sobie szerokość poszczególnych kolumn wg jakowyś ustaleń,a ustawisz ją starym,poczciwym setColumnWidth().Ot na przykład:

Kopiuj
void YourView::resizeEvent(QResizeEvent *e)
{
   QTableView::resizeEvent(e);//zakładając,że twój widok od tabeli pochodzi
   int w=viewport()->width();//a ta sztuczka jest istotna o tyle,że uwzględnia wszelakie scroll bary i headery widoku
   int c1=w/2;//przyjmijmy,że chcemy aby 1 kolumna zabierała połowę dostępnego miejsca
   int c2=w/4;//2 kolumna ma mieć 1/4 szerokości widoku
   int c3=w-c1-c2;//pozostałe miejsce przydziel tej
   setColumnWidth(0,c1);
   setColumnWidth(1,c2);
   setColumnWidth(2,c3);
}

EDIT:
Poczekaj moment,bo skoro 2 kolumny mają stały rozmiar to winno dać się jeszcze prościej,ale muszę w dokumentację zerknąć.

EDIT2:
No i już wiadomo.
Odpowiedzią na zagadkę jest QHeaderView::setResizeMode() wraz z enumem ResizeMode (polubisz zwłaszcza Fixed i Stretch) :]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.