本文主要是介绍Qt 拖放事件 drag drop,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Qt在部件中进行拖放
Qt中的拖放支持以QDrag为中心,拖放操作的大部分细节由该类处理。
除了创建QDrag对象外,还需要重新实现dragMoveEvent()来接受事件和dropEvent()处理部件上的数据。最终DragEnterEvent()需要重新实现才能接受事件。
在处理拖放操作的控件上,还需要调用
setAcceptDrops(true);
代码实现:
mydialog.h
class MyDialog : public QDialog
{Q_OBJECTpublic:explicit MyDialog(QWidget *parent = nullptr);~MyDialog();public slots:void makeDrag();protected:void dropEvent(QDropEvent *de);void dragMoveEvent(QDragMoveEvent *de);void dragEnterEvent(QDragEnterEvent *event);private:Ui::MyDialog *ui;
};class MyGroupBox : public QGroupBox
{public:MyGroupBox(QWidget *parent = nullptr) : QGroupBox(parent) {}protected:void dropEvent(QDropEvent *de);void dragMoveEvent(QDragMoveEvent *de);void dragEnterEvent(QDragEnterEvent *event);
};
mydialog.cpp
#include <QDebug>MyDialog::MyDialog(QWidget *parent) :QDialog(parent),ui(new Ui::MyDialog)
{ui->setupUi(this);QHBoxLayout *layout = new QHBoxLayout(this);QPushButton *pushButton = new QPushButton("Click Me", this);layout->addWidget(pushButton);connect(pushButton, SIGNAL(pressed()), this, SLOT(makeDrag()));MyGroupBox *box = new MyGroupBox(this);layout->addWidget(box);// 允许在dialog上拖放setAcceptDrops(true);// 允许在group box上拖放box->setAcceptDrops(true);
}MyDialog::~MyDialog()
{delete ui;
}void MyDialog::makeDrag() {QDrag *dr = new QDrag(this);// 拖放操作传递的数据存放在QMimeData 对象中QMimeData *data = new QMimeData;data->setText("This is a test");// 将QMimeData 数据的所属权分配给QDrag 对象dr->setMimeData(data);// 开始拖放操作dr->start();
}void MyDialog::dragMoveEvent(QDragMoveEvent *de) {// 在此处接收拖放事件de->accept();
}void MyDialog::dragEnterEvent(QDragEnterEvent *event) {// 将drop操作设置为建议的操作event->acceptProposedAction();
}void MyDialog::dropEvent(QDropEvent *de) {// 将数据解包,并按照希望的方式处理qDebug("Contents: my dialog %s", de->mimeData()->text().toLatin1().data());
}void MyGroupBox::dropEvent(QDropEvent *de) {// 将数据解包,并按照希望的方式处理qDebug("Contents: group box %s", de->mimeData()->text().toLatin1().data());
}void MyGroupBox::dragMoveEvent(QDragMoveEvent *de) {// 在此处接收拖放事件de->accept();
}void MyGroupBox::dragEnterEvent(QDragEnterEvent *event) {// 将drop操作设置为建议的操作event->acceptProposedAction();
}
调用:
int main(int argc, char *argv[])
{QApplication a(argc, argv);MyDialog d;d.show();return a.exec();
}
在groupbox上放开和在dialog中放开鼠标,如下输出:
Contents: group box This is a test
Contents: my dialog This is a test
这篇关于Qt 拖放事件 drag drop的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!