Qt初级:基于拖放操作和文件流操作的文件转换小助手

写在前面:

        一边用Matlab一边用VS,一边txt一边PCD。每次纯手动转换着实让人愤怒,再加上刚刚出炉的50来组数据,看着就让人失去了欲望。刚好最近在学Qt而我使用的数据大多为PointXYZ型的PCD文件,于是写个PCD与txt相互转换的小软件的想法油然而生。说干就干,Let’sgo。
        对了这里得提一下我的两本参考书:《C++GUI Qt 4编程(第二版)》,《QtCreator快速入门(第二版)》。

软件配置:

        国际惯例,先罗列下开发环境,以免给使用不同软件版本的朋友带来不便。
  • 操作系统:Win 7 64bit SP1
  • IDE:VisualStudio 2010 SP1
  • IDE:QtCreator 3.1.2 (Open Source)
  • Qt:Version4.8.0

设计思路:

   
        这里拿张软件截图讲起来比较方便。
  1. 实现pcd到txt的相互转换
  2. 通过拖放的方式来进行(多个)文件的导入,并显示导入文件的名字
  3. 点击转换按键进行文件的转换工作,并输出转换后文件名
  4. 外加能反馈软件状态的信息框

设计过程:

UI设计:


        如图所示,本软件基于Dialog设计:4个Labels,2个QListWidget(作为Input和Output Pool),1个pushButton(用于转换操作),2个Spacer,2个RadioButton(转换状态选择),1个QTextBrowser(软件状态反馈)。具体的布局过程我就不多说了。

核心代码实现:

        (1)drag and drop拖放操作
        对了,我这里转换的只是ASCII的文件,所以使用的MIME(具体信息自行搜索)类型。所以我添加了类:classQMimeData。
        对于拖放操作,我们采用Qt的事件机制来完成它,这里我们只需要两个函数:void dragEnterEvent(QDragEnterEvent *event)抓取释放操作和void dropEvent(QDropEvent *event)释放操作。
        首先我们讲解第一个函数(事件),其实它是指抓取目标并移动到可释放区域的过程,其具体实现如下:
void TransformerDialog::dragEnterEvent(QDragEnterEvent *event)
{
    // 省略部分代码
    if(event->mimeData()->hasUrls()){
        event->acceptProposedAction();
    } else {
        event->ignore();
    }  
}
        其意义为:当拖拽的文件包含MIME类型且hasUrls时接受这个操作,否则忽略这个操作。
        第二个函数(事件),指释放目标,也就是真正输入的操作,其具体实现如下:
void TransformerDialog::dropEvent(QDropEvent *event)
{
    QList<QUrl> urls = event->mimeData()->urls();
    QString fileName = urls.first().toLocalFile();
    // 省略部分代码
}
        这里我使用了容器QList和类型QUrl来存储拖入目标的位置和文件名,这样就可成功实现(多个)文件输入了,当然接下来的代码可以实现滤掉一些文件(如.exe等)的功能。
        (2)transformer 文件转换
        这是本软件的另一个核心内容,这里主要使用的是Qt的文件流,其实这个跟标准C++的文件流差不多:
        读文件:这里我采用了最简单的读取方式lineby line
QFile infile(localFile.at(i));
if(infile.open(QFile::RealOnly)) {
    QTextStream in(&infile)
    QString line;
    while(!in.atEnd()) {
        line = in.readLine();
    }
}
        写文件:也很简单
OFile outfile(outputFileName.at(i));
if(outfile.open(QFile::WriteOnly())) {
    QTextStream out(%outfile);
    out << "需要写入的文字" << endl;
}
        总结:最后大家就可以使用Qt中以上两个简单的功能实现文件的转换操作了,当然加上多线程就会避免程序出现假死的状况,程序的源码我已经上传到CSDN( 点此下载)。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值