我想使用
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);
}