QTreeWidget 如何在 1 col9umn 内添加自定义控件?

问题描述 投票:0回答:1

我想使用

QTreeWidget
创建一个类似 Photoshop 的图层系统,因为它允许类似组的结构。

这是我要补充的:

Horizontal Layout: [Icon,  LineEdit, Checkbox]

但是,我不知道如何将控件放在那里,尤其是像在 Photoshop 中那样定位。

我子类化了

QTreeWidget
:请注意,我需要支持拖放分组和自定义图层高度。复选框应该在最右边对齐,图标应该是 32x32 像素:

ViewLayerList::ViewLayerList(CustomGraphicsScene* scene, QWidget* parent)
    : QTreeWidget{parent}, scene_durchgereicht(scene)
{

    this->setHeaderHidden(false);
    this->setRootIsDecorated(true);

    this->setStyleSheet("QTreeWidget::item { height: 50px; }");
    this->setIndentation(0);
    this->setColumnCount(1);

    this->setFocusPolicy(Qt::NoFocus);

    QTreeWidgetItem* item = new QTreeWidgetItem();
    item->setText(0, "Hallo");
    this->addTopLevelItem(item);

    QWidget* widget = new QWidget;
    QHBoxLayout* layout = new QHBoxLayout(widget);

    QTreeWidgetItem* treeItem = new QTreeWidgetItem();

    QLineEdit* lineEdit = new QLineEdit;
    lineEdit->setPlaceholderText("<Empty>");
    lineEdit->setReadOnly(true);

    QCheckBox* checkBox = new QCheckBox;

    lineEdit->setAlignment(Qt::AlignVCenter);

    layout->addSpacing(10);
    layout->addWidget(lineEdit);
    layout->addStretch(1);
    layout->addWidget(checkBox);
    layout->setContentsMargins(0, 0, 10, 0);
    layout->setSpacing(20);
    widget->setLayout(layout);

    treeItem->setSizeHint(0, widget->sizeHint());
    treeItem->setText(0, "");
    treeItem->setIcon(0, QIcon(":/resource/quick.png"));
    treeItem->setSizeHint(0, QSize(treeItem->sizeHint(0).width(), 35));

    this->addTopLevelItem(treeItem);
    this->setItemWidget(treeItem, 0, widget);

    this->setDragDropMode(QAbstractItemView::InternalMove);
    this->setSelectionMode(QAbstractItemView::ExtendedSelection);
    this->setDragEnabled(true);
    this->setAcceptDrops(true);
    this->setDropIndicatorShown(true);
}
c++ qt qtreewidget qtreewidgetitem
1个回答
0
投票

This is how it should look like:

我假设我必须以某种方式使用委托来获得类似的东西或使用 QStandartItemModel 做一些事情,但我不知道如何做。任何提示或最小的代码示例都会有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.