У меня есть QTreeWidget
, который заполнен пользовательскими виджетами. Я извлекаю тип элемента из внешнего API, это может быть текстовое значение, числовое значение или что-то еще. В зависимости от типа, я предоставляю различные элементы управления для QTreeWidgetItem
. Например, QLabel
для текстового ввода, QSpinBox
для числовых значений и т. Д.Интервал вертикальной строки в QTreeWidget
Это делается с помощью следующего кода:
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
}
}
}
код работает, но в результате TreeWidget имеет проблему:
В результате TreeWidgetItem имеет много расстояния, что делает TreeWidget трудно читать/повторять визуально. Есть ли быстрый и простой способ предоставить что-то вроде QSizePolicy, которое сжимает элементы? Я пробовал каждую комбинацию, но пока ничего не работало.
Вы пробовали установку 'verticalHeaderDefaultSectionSize'? –
Нет, пожалуйста, уточните, я не нашел достоверной информации об этом имуществе. – Hafnernuss
это называется 'verticalHeaderDefaultSectionSize' в Designer, в коде вам, вероятно, придется использовать' table-> verticalHeader-> setDefaultSectionSize (...) ' –