2016-08-05 15 views
0

Ich habe eine QTreeView, die 5 Spalten hat. Die Anforderung besteht darin, nur die erste Spalte zu strecken, aber alle 5 Spalten sollten durch den Benutzer in der Größe veränderbar sein (d. H. Sie können auch interaktiv sein). Also schrieb ich den folgenden Code:QTreeView/QHeaderView Größe ändern nur die erste Spalte zu strecken und interaktive beide

int numCols = myModel->columnCount(); 
    for(int i=0;i<numCols;i++) 
    { 
     myQTreeView->resizeColumnToContents(i); 
     if(i==0) 
      {  
      myQTreeView->header()->setResizeMode(i,QHeaderView::Stretch); 
      } 
     else 
      { 
      myQTreeView->header()->setResizeMode(i,QHeaderView::Interactive); 
      } 
    } 

Aber wie für die 1. Säule erwartet funktioniert nicht. Obwohl sich die erste Spalte erstreckt, ist sie jedoch nicht veränderbar/interaktiv wie der Rest der Spalten. Daher möchte ich stretch + interactive für die erste Spalte hinzufügen. Der Rest der 4 Spalten könnte auch nur interaktiv sein. Ist das möglich?

Antwort

2

Nach dem documentation für QHeaderView::ResizeMode, wenn der Modus auf QHeaderView::Stretch gesetzt wurde ...

Die Größe kann nicht durch den Benutzer oder programmatisch geändert werden.

Also, nein, ich denke nicht, dass es möglich ist, mit den Standard-APIs zu erreichen, was Sie wollen.

Sie könnten versuchen, den Resize-Modus zu QHeaderView::Custom und Überschreiben der verschiedenen Maus Event-Handler in den QHeaderView entweder durch Setzen eines Ereignisfilter auf den bestehenden QHeaderView oder durch die Installation eines eigene Klasse von QHeaderView vererben zu schaffen und eine Instanz der Installation in Ihrem Ansicht über QTreeView::setHeader.

Verwandte Themen