QT的拖拽程序示例(自定义格式)

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    textEdit = new QTextEdit;
    setCentralWidget(textEdit);

    textEdit->setAcceptDrops(false); //禁用textEdit控件的放下操作
    setAcceptDrops(true);//启用textEdit控件的放下操作

    setWindowTitle(tr("Text Editor"));
}

MainWindow::~MainWindow()
{

}

void MainWindow::dragEnterEvent(QDragEnterEvent *e)
{
    if(e->mimeData()->hasFormat("text/uri-list")) //只能打开文本文件
        e->acceptProposedAction(); //能够在这个窗口部件上拖放对象
    if(e->mimeData()->hasFormat("application/x-dnditemdata0")) { //自定义的MIME类型
        e->acceptProposedAction();
        qDebug() << "enter";
    }
}

void MainWindow::dropEvent(QDropEvent *e) //释放对方时,执行的操做
{
    qDebug() << "haha";
    QString txt = e->mimeData()->text();
    qDebug() << "is:" << txt;
    QList<QUrl> urls = e->mimeData()->urls();
    if(urls.isEmpty())
        return ;

    QString fileName = urls.first().toLocalFile();

    foreach (QUrl u, urls) {
        qDebug()<<u.toString();
    }
    qDebug()<< urls.size();

    if(fileName.isEmpty())
        return;

    if(readFile(fileName))
        setWindowTitle(tr("%1 - %2").arg(fileName).arg("Drag File"));

}

bool MainWindow::readFile(const QString &fileName) //读文件
{
    QFile file(fileName);
    if(!file.open(QFile::ReadOnly | QFile::Text))
          return false;

    QByteArray data;
    data = file.readAll();
    //textEdit->setText(QString::fromLocal8Bit(data));

    return true;
}

 

posted @ 2021-12-19 23:53  茗智溪  阅读(275)  评论(0)    收藏  举报
/* 看板娘 */