qt 拖动按钮到容器控件
时间: 2023-08-05 19:59:16 浏览: 51
您可以使用Qt的拖放功能来实现将按钮拖动到容器控件的操作。下面是一个简单的示例代码,演示了如何实现此功能:
```cpp
#include <QtWidgets>
class Button : public QPushButton
{
public:
Button(const QString& text, QWidget* parent = nullptr)
: QPushButton(text, parent)
{
setStyleSheet("QPushButton { background-color: yellow }");
setMinimumSize(100, 50);
setAcceptDrops(true);
}
protected:
void mousePressEvent(QMouseEvent* event) override
{
if (event->button() == Qt::LeftButton) {
QDrag* drag = new QDrag(this);
QMimeData* mimeData = new QMimeData;
mimeData->setText(text());
drag->setMimeData(mimeData);
drag->exec(Qt::MoveAction);
}
QPushButton::mousePressEvent(event);
}
};
class Container : public QWidget
{
public:
Container(QWidget* parent = nullptr)
: QWidget(parent)
{
setAcceptDrops(true);
setStyleSheet("QWidget { background-color: lightgray }");
}
protected:
void dragEnterEvent(QDragEnterEvent* event) override
{
if (event->mimeData()->hasText()) {
event->acceptProposedAction();
}
}
void dropEvent(QDropEvent* event) override
{
QString buttonText = event->mimeData()->text();
Button* button = new Button(buttonText, this);
button->move(event->pos());
button->show();
event->acceptProposedAction();
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QVBoxLayout layout(&window);
Button* button = new Button("Drag Me", &window);
Container* container = new Container(&window);
layout.addWidget(button);
layout.addWidget(container);
window.setLayout(&layout);
window.show();
return app.exec();
}
```
这个示例代码创建了一个`Button`类,继承自`QPushButton`,并重写了鼠标点击事件,在左键点击时启动一个拖放操作。`Container`类继承自`QWidget`,实现了接受拖放事件的功能。
在`main`函数中,我们创建了一个窗口和一个垂直布局,将一个可拖动的按钮和一个容器控件添加到布局中。运行程序后,您可以点击按钮并拖动它到容器控件中,松开鼠标后按钮会被放置在容器内部。
请注意,这只是一个简单的示例,您可以根据您的需求进行修改和扩展。希望对您有所帮助!
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)