QT读取剪贴板信息和拖动文件到程序以(拖动音乐播放为列)
来源:互联网 发布:长期股权投资转换知乎 编辑:程序博客网 时间:2024/05/17 07:00
来句心灵毒药:一个人越懒,明天要做的事情就越多
------------------------------------------------------------------------------------------------------华丽的分割线-------------------------------------------------------------------------------------------------
有时候看到很多程序可以直接拖一个文件到程序就可以打开是不是很炫酷呀!
那么我们今天就干这件事
首先写出来我们需要重写的两个虚函数:
protected:QMediaPlayer *mediaPlayer;void dragEnterEvent(QDragEnterEvent *event);//拖动事件void dropEvent(QDropEvent * event); //放下事件bool readFile(const QString &fileNmae);QLineEdit *lineEdit;首先我们需要重写拖动事件,和放下事件,不信你想想是不是那个道理,先拖动,再放下。
我们在来看看拖动事件的具体实现:
void DragAndDrop::dragEnterEvent(QDragEnterEvent *event){if (event->mimeData()->hasFormat("text/uri-list"))//mimeData()是一个mime集合,mime集合具体可以百度,这里判断他支持的文件类型,为文本{event->acceptProposedAction();//如果是这个类型我们就调用accepProposedAction使他接受这个拖放}}这个,拖动事件写的很详细了,excuse me?
我们再来看看放下事件:
void DragAndDrop::dropEvent(QDropEvent * event){QList<QUrl>urls = event->mimeData()->urls();//urls获取文件的集合,有时可能你会拖动选中的一片文件if (urls.isEmpty()){return;}QString fileName = urls.first().toLocalFile();//这里我们只取第一个,并准换为地址if (fileName.isEmpty())return;if (readFile(fileName)){//okreturn;}}//读取文件判断类型该干什么。bool DragAndDrop::readFile(const QString &fileName){QStringList fileListItem = fileName.split(".");//得到文件的类型if (fileListItem.size()!=0){<span style="white-space:pre"></span>//如果是MP3或者wma就是播放音乐if (((fileListItem.last().toLower()) == "mp3") || ((fileListItem.last().toLower()) == "wma")){mediaPlayer->stop();mediaPlayer->setMedia(QUrl::fromLocalFile(fileName));mediaPlayer->play();QMessageBox::information(this, QString::fromLocal8Bit("正在播放:"), fileName);return true;}else if ((fileListItem.last().toLower()) == "txt"){}}else{QMessageBox::information(this, QString::fromLocal8Bit("不能识别拖动的文件名"), fileName);}QMessageBox::information(this, QString::fromLocal8Bit("拖动的文件名"), fileName); return true;}放下事件一切都是这么简单,
---------------------------------------------------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------------------
以下是得到剪贴板的信息的代码:
QClipboard *clipboard = QApplication::clipboard();connect(clipboard, SIGNAL(dataChanged()), this, SLOT(readClipboard()));//这里定义一个槽用于接收剪贴板的时时改变
void DragAndDrop::readClipboard(){QClipboard* clipboard = qobject_cast<QClipboard*>(QObject::sender());//获得发送信号的源对象 QString text = clipboard->text();//获得剪贴板的文本,图片需要用image(),lineEdit->setText(text);}
---------------------------------------------------------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------------------
然后博主还是把整个文件的代码放出来吧:
.h文件的代码:
#include <QWidget>#include <QMainWindow>#include <QDragEnterEvent>#include <QLabel>#include <QTextEdit>#include <QSizePolicy>#include <QMimeData>#include <QClipboard>#include <QApplication>#include <QSize>#include <QMediaPlayer>#include <QVBoxLayout>#include <QHBoxLayout>#include <QMessageBox>#include <QLineEdit>class DragAndDrop:public QWidget{Q_OBJECTpublic:DragAndDrop(QWidget *parent=0);~DragAndDrop();protected:QMediaPlayer *mediaPlayer;void dragEnterEvent(QDragEnterEvent *event);void dropEvent(QDropEvent * event); bool readFile(const QString &fileNmae);QLineEdit *lineEdit;private slots:void readClipboard();};
#include "draganddrop.h"DragAndDrop::DragAndDrop(QWidget *parent) :QWidget(parent){setAcceptDrops(true);QLabel *dragText = new QLabel(QString::fromLocal8Bit("请拖动到下面系统自动识别文件类型""(歌曲可以播放):")); QLabel *clipboardText = new QLabel(QString::fromLocal8Bit("剪贴板:"));lineEdit = new QLineEdit; clipboardText->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);QClipboard *clipboard = QApplication::clipboard();connect(clipboard, SIGNAL(dataChanged()), this, SLOT(readClipboard())); mediaPlayer = new QMediaPlayer;QVBoxLayout *qhb = new QVBoxLayout;qhb->setSpacing(0);qhb->addWidget(clipboardText);qhb->addWidget(lineEdit);qhb->addWidget(dragText);qhb->addStretch(); setLayout(qhb);this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);this->setMinimumHeight(500);this->setMinimumWidth(500);}void DragAndDrop::readClipboard(){QClipboard* clipboard = qobject_cast<QClipboard*>(QObject::sender());//获得发送信号的源对象 QString text = clipboard->text();lineEdit->setText(text);}void DragAndDrop::dragEnterEvent(QDragEnterEvent *event){if (event->mimeData()->hasFormat("text/uri-list")){event->acceptProposedAction();}}void DragAndDrop::dropEvent(QDropEvent * event){QList<QUrl>urls = event->mimeData()->urls();if (urls.isEmpty()){return;}QString fileName = urls.first().toLocalFile();if (fileName.isEmpty())return;if (readFile(fileName)){//okreturn;}}bool DragAndDrop::readFile(const QString &fileName){QStringList fileListItem = fileName.split(".");if (fileListItem.size()!=0){if (((fileListItem.last().toLower()) == "mp3") || ((fileListItem.last().toLower()) == "wma")){mediaPlayer->stop();mediaPlayer->setMedia(QUrl::fromLocalFile(fileName));mediaPlayer->play();QMessageBox::information(this, QString::fromLocal8Bit("正在播放:"), fileName);return true;}else if ((fileListItem.last().toLower()) == "txt"){}}else{QMessageBox::information(this, QString::fromLocal8Bit("不能识别拖动的文件名"), fileName);}QMessageBox::information(this, QString::fromLocal8Bit("拖动的文件名"), fileName); return true;}DragAndDrop::~DragAndDrop(){}
-----------------------------------------------------------------------------------------------------------华丽的结束线-------------------------------------------------------------------------------------------------------
------------------
-----------
------
- QT读取剪贴板信息和拖动文件到程序以(拖动音乐播放为列)
- nw.js node-webkit系列(20)拖动文件到页面并读取文件信息
- 仿酷狗音乐播放器开发日志二十七 用ole为窗体增加文件拖动功能(附源码)
- Qt拖动程序窗口
- 读取剪贴板文件信息
- 拖动文件到窗体
- Event事件之剪贴板和拖动事件
- WPF 拖动多个文件到窗体 添加文件信息
- Android 音乐播放器的开发教程(八)歌曲的切换和进度条的拖动 ----- 小达
- Qt 无标题无边框程序的拖动和改变大小
- Qt 无标题无边框程序的拖动和改变大小
- Qt 无标题无边框程序的拖动和改变大小
- Qt QSlider点击和拖动
- win7无法拖动文件到任务栏用其它程序打开
- Qt 复制文件到剪贴板
- Android 超简单音乐播放器(七)拖动歌曲进度条~音量控制~
- 仿手机酷狗-音乐播放页面拖动效果
- 实现本地音乐选择,播放,带可拖动进度条
- jq 移动端禁止滑屏 消除禁止滑屏
- “杀猪车”,哪里逃?!
- 第8周项目4-字符串加密
- 登录vpn提示没有安装java
- function-style conversion to builtin type takes only one argument
- QT读取剪贴板信息和拖动文件到程序以(拖动音乐播放为列)
- 随笔
- 6 OC基础06
- python 学习--定制类
- GCD的一些简单使用
- react-native打离线bundle包
- oracle卸载重装,碰到问题,“[INS-07009] 无法加载 BeanStore”
- 求s = a+aa+aaa+aaaa+a......a的值,其中a是一个数字
- ADB 出现 offline