//dragwindow.h
class DragWindow : public QMainWindow {
private:
QLineEdit *lineEdit;
public:
DragWindow();
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
};
//dragwindow.cpp
DragWindow::DragWindow() {
lineEdit = new QLineEdit;
setCentralWidget(lineEdit);
setAcceptDrops(true);
}
void DragWindow::dragEnterEvent(QDragEnterEvent *event) {
event->acceptProposedAction();
}
void DragWindow::dropEvent(QDropEvent *event) {
QUrl url = event->mimeData()->urls().first();
QString path = url.path();
QString name = url.fileName();
lineEdit->setText(name);
}
//main.cpp
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
DragWindow* w = new DragWindow();
w->setGeometry(0, 0, 800, 600);
w->show();
return app.exec();
}
以上通过继承QMainWindow,重写其拖放方法来实现拖放功能 我们也可以使用前面的EventFilter来重写拖放事件 很多时候,我们只给QLineEdit添加拖放监听,并不想重新定义一个类,此时就需要使用EventFilter