2012-01-24 10 views
5

Jestem studentem programisty i używam Qt do budowania interfejsu GUI do pracy. Mam numer QTreeWidget, który ma w sumie 8 kolumn. Dane wejściowe, które należy wprowadzić do każdej z tych kolumn, są dość małe. W związku z tym próbowałem znaleźć sposób na zmianę rozmiaru wszystkich kolumn na najmniej wymaganą ilość miejsca. podobnie jak akcja wykonywana po kliknięciu na dzielniki. Przejrzałem kilka stron internetowych oraz dokumentację Qt i nie znalazłem rozwiązania. Po przejrzeniu dokumentacji wydaje się, że istnieje kilka sposobów, aby to zrobić, ale nie mogę dostać jeden do pracy. Zaczynam myśleć, że muszę włączyć/wyłączyć coś gdzieś. To tak, jak zmiany, które zapisuję w mojej funkcji budowania (Ta funkcja usuwa tabelę, Odczytuje dane z mojego wektora, wyświetla określone dane w tabeli, a następnie zakłada się, aby zmienić rozmiar nagłówków/kolumn na wielkość wystarczającą do dopasowania zawartość kolumny) nie są nawet stosowane. Próbowałem następujących bez zmian:Jak zmienić rozmiar kolumn w QTreeWidget na wymaganą minimalną przestrzeń?

 ui->treeWidgetInjections->setColumnWidth(i, minimumWidth()); 
     ui->treeWidgetInjections->resizeColumnToContents(i); 
     ui->treeWidgetInjections->header()->ResizeToContents; 
     ui->treeWidgetInjections->header()->resizeSection(i, minimumWidth()); 

Wszystko to są w końcu mojego kompilacji Function (niezwiązane informacji usunięto):

ui->treeWidgetInjections->clear(); 
    for (int i=0; i < qTreeInjectionData.size(); i++) 
     { 
      //fill Qtree with items; 
      //fill QTree items with data; 
      //re size function here; 
     } 

Proszę zostawić tylko produktywne zwrotnych jak ja tylko zainteresowani nauką i pokonywaniem tego wyzwania. Z góry dziękuję!

+0

myślę, że mój pętli jest problem tutaj; w szczególności myślę, że. rozmiar może być odpowiedzialny za ten problem. –

Odpowiedz

14

Ten minimalny przykład działa dla mnie:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QVBoxLayout *layout = new QVBoxLayout(centralWidget()); 
    QTreeWidget *tree = new QTreeWidget(this); 
    layout->addWidget(tree); 

    tree->setColumnCount(3); 

    QStringList first, second, third; 
    first << "xxxxxxxxx"  << "xxxxxxxxxxxxx"  << "xxxxxxxx"; 
    second << "xxxxx"   << "xxxxxxxxxxxxxxxxx" << "xxxxx"; 
    third << "xxxxxxxxxxxxxx" << "xxxxxxxxxx"  << "xxxxxxxx"; 

    tree->insertTopLevelItem(0, new QTreeWidgetItem(first)); 
    tree->insertTopLevelItem(0, new QTreeWidgetItem(second)); 
    tree->insertTopLevelItem(0, new QTreeWidgetItem(third)); 

    for(int i = 0; i < 3; i++) 
     tree->resizeColumnToContents(i); 
} 

Wszystko, co musisz zrobić, to wywołać metodę resizeColumnToContents() raz dla każdej kolumny po wypełnianie pogląd. Daj mi znać, jeśli problem będzie się powtarzał.

+0

To naprawdę dziwne, ale kiedy stworzyłem oddzielną pętlę for w mojej funkcji budowania dla moich rozmiarów kolumn, działało dobrze ... bardzo dziwnie. DZIĘKI ZA POMOC! Twój przykład bardzo mi pomógł i jestem pewien, że to pomoże innym! –

+1

Niestety, ta metoda zmienia rozmiar tylko zgodnie z zawartością nagłówka. Dane wyświetlane z zawijanymi słowami. –

2

Problem polegał na tym, że StretchLastSection ustawiono na wartość true i jeśli ta wartość jest ustawiona na wartość true, ta właściwość zastąpi tryb zmiany rozmiaru ustawiony w ostatniej sekcji w nagłówku.

Rozwiązanie:

_treeWidget = new UIWidgetSceneTree(); 
_treeWidget->header()->setStretchLastSection(false); 
_treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);