在Qt中,可以通过拖放的方式在鼠标下获取QLayout中的widget。以下是一种实现方法:
class DragLabel : public QLabel
{
public:
DragLabel(const QString& text, QWidget* parent = nullptr) : QLabel(text, parent)
{
setAlignment(Qt::AlignCenter);
setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
setStyleSheet("QLabel { background-color: lightblue; border: 1px solid darkblue; }");
}
void mousePressEvent(QMouseEvent* event) override
{
if (event->button() == Qt::LeftButton)
QDrag::startDrag(this, Qt::CopyAction);
}
};
QVBoxLayout* layout = new QVBoxLayout;
QWidget* container = new QWidget;
container->setLayout(layout);
DragLabel* label1 = new DragLabel("Widget 1");
DragLabel* label2 = new DragLabel("Widget 2");
DragLabel* label3 = new DragLabel("Widget 3");
layout->addWidget(label1);
layout->addWidget(label2);
layout->addWidget(label3);
container->setAcceptDrops(true);
void dragEnterEvent(QDragEnterEvent* event) override
{
if (event->mimeData()->hasFormat("text/plain"))
event->acceptProposedAction();
}
void dragMoveEvent(QDragMoveEvent* event) override
{
event->acceptProposedAction();
}
void dropEvent(QDropEvent* event) override
{
if (event->mimeData()->hasFormat("text/plain"))
{
QString text = event->mimeData()->text();
DragLabel* newLabel = new DragLabel(text);
layout->addWidget(newLabel);
event->acceptProposedAction();
}
}
通过以上步骤,我们创建了一个可以拖放的QLayout,并在鼠标下获取QLayout中的widget。当用户拖动一个DragLabel实例到容器widget中时,会在该位置上创建一个新的DragLabel实例。
请注意,以上代码仅为示例,实际应用中可能需要根据具体需求进行适当修改和扩展。至于推荐的腾讯云产品和产品介绍链接地址,由于要求不提及具体品牌商,此处不提供相关信息。
领取专属 10元无门槛券
手把手带您无忧上云