2016-05-27 22 views
0

Ich habe eine QTreeWidget, die mit benutzerdefinierten Widgets bestückt ist. Ich erhalte den Elementtyp von einer externen API, es kann ein Textwert, ein numerischer Wert oder was auch immer sein. Abhängig von der Art, biete ich verschiedene Kontrollen an QTreeWidgetItem. Zum Beispiel eine QLabel für Texteingabe, eine QSpinBox für numerische Werte und so weiter.Vertikaler Zeilenabstand in QTreeWidget

Dies erfolgt über den folgenden Code getan:

for (GenApi::INode * poNode : oNodeList) // iterate over a list of items which i want to represent in the treewidget 
{ 
QTreeWidgetItem * poRootItem = new QTreeWidgetItem(poTree); //poTree is a QTreeWidget 
poRootItem->setText(0, poNode->GetDisplayName().c_str()); 
poTree->addTopLevelItem(poRootItem);      // add as category 

GenApi::NodeList_t oInnerNodes; 
poNode->GetChildren(oInnerNodes); 

for (GenApi::INode * poInnerNode : oInnerNodes)    // each of those nodes may have innter child nodes 
{ 
    QTreeWidgetItem * poItem = new QTreeWidgetItem(); 
    CNodeItemBase * poNodeUI = NULL; 

    if (GenApi::CIntegerPtr(poInnerNode) != NULL) 
     poNodeUI = new CNodeItemInteger(*poInnerNode, poTree); //CNodeItem... inherits from QWidget and takes the tree as parent 

    else if (GenApi::CStringPtr(poInnerNode) != NULL) 
     poNodeUI = new CNodeItemString(*poInnerNode, poTree); 

    // more possibilities go here.... 

    if (poNodeUI != NULL) 
    { 
     poRootItem->addChild(poItem); 
     poItem->setText(0, poNodeUI->GetDisplayName().c_str()); // set text of the item 
     poTree->setItemWidget(poItem, 1, poNodeUI->m_poControl); // set label/spinbox as widget of the treeitem 
    } 
} 
} 

Der Code funktioniert, aber die resultierende TreeWidget hat ein Problem:

enter image description here

Das resultierende TreeWidgetItem viel Abstand hat, der macht Das TreeWidget ist visuell schwer lesbar. Gibt es eine schnelle und einfache Möglichkeit, etwas wie eine QSizePolicy bereitzustellen, die die Items verkleinert? Ich habe jede Kombination ausprobiert, aber bisher hat noch nichts funktioniert.

+0

haben Sie versucht, 'verticalHeaderDefaultSectionSize' zu ​​setzen? –

+0

Nein, bitte erläutern, ich habe keine solide Informationen zu dieser Eigenschaft gefunden. – Hafnernuss

+0

In Designer heißt es 'verticalHeaderDefaultSectionSize', im Code muss man wahrscheinlich' table-> verticalHeader-> setDefaultSectionSize (...) ' –

Antwort

1

Da Sie Widgets mit einem Layout verwenden, stellen Sie sicher, dass Sie setContentsMargins im Layout mit kleineren/geeigneten Werten aufrufen (der Standardwert ist sechs Pixel an jeder Kante, ungeachtet dessen, was die Dokumentation sagt).