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
Odpowiedz
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.
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
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
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:
void QHeaderView::stretchLastSection(bool stretch)
Jak Davy Jones wymienione.Przykład:
QTableView *table = new QTableView(); table->horizontalHeader()->setStretchLastSection(true);
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);
Ten kod równie stretchs każdy kolumn, tak aby dopasować szerokość stołu.
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
Docs:
- QHeaderView::setSectionResizeMode
- Zobacz rozmiaru tryby here.
Chcę cię teraz pocałować, żartuję ;-) .. Tak długo szukałem tej linii .. dziękuję –
Idealne ... To jest idealne rozwiązanie dla problemu rozciągania/skalowania TableView. Naprawdę dzięki los.. – Maxx
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); –