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:
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.
haben Sie versucht, 'verticalHeaderDefaultSectionSize' zu setzen? –
Nein, bitte erläutern, ich habe keine solide Informationen zu dieser Eigenschaft gefunden. – Hafnernuss
In Designer heißt es 'verticalHeaderDefaultSectionSize', im Code muss man wahrscheinlich' table-> verticalHeader-> setDefaultSectionSize (...) ' –