2016-05-27 6 views
0

У меня есть 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 имеет проблему:

enter image description here

В результате TreeWidgetItem имеет много расстояния, что делает TreeWidget трудно читать/повторять визуально. Есть ли быстрый и простой способ предоставить что-то вроде QSizePolicy, которое сжимает элементы? Я пробовал каждую комбинацию, но пока ничего не работало.

+0

Вы пробовали установку 'verticalHeaderDefaultSectionSize'? –

+0

Нет, пожалуйста, уточните, я не нашел достоверной информации об этом имуществе. – Hafnernuss

+0

это называется 'verticalHeaderDefaultSectionSize' в Designer, в коде вам, вероятно, придется использовать' table-> verticalHeader-> setDefaultSectionSize (...) ' –

ответ

1

Поскольку вы используете виджеты с макетом, не забудьте позвонить setContentsMargins на макет с меньшими/соответствующими значениями (по умолчанию шесть пикселей на каждом краю, несмотря на то, что говорят документы).

Смежные вопросы