2013-08-17 18 views
14

Jestem nowy w QT i właśnie udało mi się wykonać pracę QTableView z moim modelem. Naprawiono 3 kolumny. Kiedy otwieram okno, wygląda dobrze, ale kiedy zmieniam rozmiar okna, rozmiar samego QTableView zostanie zmieniony, ale szerokość kolumn pozostanie taka sama. Czy jest jakiś wbudowany sposób, aby działał? Chcę, aby kolumny zmieniały rozmiar, aby pasowały do ​​krawędzi QTableView, gdy każde okno zostanie zmienione.Kolumny automatycznie zmieniają rozmiar na QTableView

+0

Czy zawsze chcesz, aby szerokości kolumn były takie same?Jeśli nie, możesz rozciągnąć szerokość ostatniej kolumny, wywołując tabelkę-> horizontalHeader() -> setStretchLastSection (true); –

Odpowiedz

17

Istnieje flaga nagłówka, aby zapewnić, że ostatnia kolumna QTableView wypełni element nadrzędny w przypadku zmiany rozmiaru. Możesz ustawić go tak:

table_view->horizontalHeader()->setStretchLastSection(true); 

Nie zmienia to jednak proporcjonalnie innych kolumn. Jeśli chcesz zrobić to równie dobrze, można obsługiwać go wewnątrz resizeEvent swojego rodzica wygląda następująco:

void QParent::resizeEvent(QResizeEvent *event) { 
    table_view->setColumnWidth(0, this->width()/3); 
    table_view->setColumnWidth(1, this->width()/3); 
    table_view->setColumnWidth(2, this->width()/3); 

    QMainWindow::resizeEvent(event); 
} 

klasa QParent jest podklasą QMainWindow.

+0

Nie przetestowałem drugiej części, ale pierwsza zadziałała, chociaż zdecydowałem się uczynić okno nieosiągalnym (co było dla mnie bardziej sensowne). – khajvah

+0

Aby ustawić proporcjonalne szerokości kolumn, najłatwiej było przesłonić parametr resizeEvent, jak pokazano, ale przez podklasę o QTableView, a nie o QMainWindow. – jtbr

3

Widgety QTableView, QTreeView i ich klasy pochodne (takie jak QTableWidget) mają te dwie użytecznych metod:

QHeaderView* horizontalHeader() const; 
QHeaderView* verticalHeader() const; 

Jeśli otwarte dokumentacji dla klasy QHeaderView znajdziesz metody skonfigurować wygląd i zachowanie nagłówek wiersza lub kolumny dla widoków elementów. Można rozwiązać problem przez jedną z następujących metod:

  1. void QHeaderView::stretchLastSection(bool stretch)
    Jak Davy Jones wymienione.

    Przykład:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setStretchLastSection(true); 
    
  2. void QHeaderView::setResizeMode(ResizeMode mode)
    Jak trybie można ustawić QHeaderView :: Stretch lub QHeaderView :: ResizeToContents.
    Niestety ta metoda ma swoją wadę - po jej zastosowaniu nie będzie można ręcznie zmienić rozmiaru kolumn (lub wierszy) (w GUI) lub programowo.

    Przykład:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch); 
    
26

Ten kod równie stretchs każdy kolumn, tak aby dopasować szerokość stołu.

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 

Docs:

+0

Chcę cię teraz pocałować, żartuję ;-) .. Tak długo szukałem tej linii .. dziękuję –

+0

Idealne ... To jest idealne rozwiązanie dla problemu rozciągania/skalowania TableView. Naprawdę dzięki los.. – Maxx

Powiązane problemy