• QT::拖放事件


    Drag拖操作 Drop放操作
    将文件拖进TextEdit中,TextEdit自动打开文件读取内容到TextEdit中。
    1、数据拖动时会被存储在MIME(Multipurpose internet Mail Extensions)中。
    2、在QT中使用QMimeData来表示MIME数据,并使用QDraw来完成数据的转换,
    3、而拖放操作都在鼠标事件中完成。
    MIME型处理函数
    测试函数:
    hasText()
    hasHtml()
    hasUrls()
    hasImage()
    hasColor()
    获取函数:
    text()
    html()
    urls()
    imageData()
    colordata()
    设置函数:       MIME类型:
    settext()       text/plain
    sethtml()       text/html
    seturls()       text/url-list
    setimageData()  image/*
    setcolordata()  application /x-color
    1、鼠标拖入一个数据进入主窗口时,会触发dragEnterEvent处理事件。获取MIME数据。
    2、查看是否有url路径(拖入文本文件实质是拖入它的路径)。
    3、当松开左键时,数据放入主窗口时,会触发dropEvent事件。
    4、获取MIME里的列表,拖入只有一个文件,所以获取列表中的第一个条目。并使用toLocalFile()转换为本地路径。
    5、使用QFile和QTextStream将文件中的数据读入编辑器中。
    void MainWindow::dragEnterEvent(QDragEnterEvent *e)
    {
        if(e->mimeData()->hasUrls())//数据是否包含URL。
            e->acceptProposedAction();//如果是则接收动作。
        else
            e->ignore();//如果不是则忽略。
    
    }
    void MainWindow::dropEvent(QDropEvent *e)
    {
        const QMimeData *mimi = e->mimeData();//获取mime数据。
        if(mimi->hasUrls())                  //如果数据包中url
        {
            QList<QUrl>urlList = mimi->urls();//获取URL列表
    
            QString fileName = urlList.at(0).toLocalFile();
            if(!fileName.isEmpty())
            {
                QFile file(fileName);            //建立QFile对象,并以只读的方式打开。
                if(file.open(QIODevice::ReadOnly))
                    return;
    
                QTextStream in(&file);           //建立文本流对象。
                ui->textEdit->setText(in.readAll());
            }
        }
    }
  • 相关阅读:
    [机器学习]决策树
    [机器学习]Bagging and Boosting
    [机器学习]SVM原理
    [算法]排序算法综述
    天目山大峡谷和西天目山游记【转】
    西天目山出游攻略
    京东物流深度研究报告:京东物流VS亚马逊物流VS顺丰
    「数据标签体系」中台价值链路中“核心的核心”
    网络空间安全概论第一、四章笔记
    21牛客多校第一场
  • 原文地址:https://www.cnblogs.com/osbreak/p/14342642.html
Copyright © 2020-2023  润新知