#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
setCentralWidget(ui->label);
this->setAcceptDrops(1);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
if(event->mimeData()->hasFormat("text/uri-list"))
event->acceptProposedAction();
}
void MainWindow::dropEvent(QDropEvent *event)
{
QList<QUrl>urls=event->mimeData()->urls();
if(urls.isEmpty())
return;
QString fileName=urls.first().toLocalFile();
/*
QFile file(fileName);
QTextStream in(&file);
if(!file.open(QIODevice::ReadOnly))
return ;
ui->label->setText(in.readAll());
*/
ui->label->setPixmap(QPixmap(fileName));
}
其实只要知道用户从硬盘上拖动进程序内的文件名和路径就够了,
类型我自己判断好了,有必要整那么复杂吗?
if (event->mimeData()->hasImage()) {
QImage image = qvariant_cast<QImage>(event->mimeData()->imageData());
...
}
不知为什么上面那断代码的条件总是假的,自定义拖动类型暂时没这需求,
那qt自带的拖放例子好长好长,不想看,先留个脚印先。