Qt总结(八)-- 文件、数据存取

1.15

文件流操作

最简单例子,保存后的文件用记事本打开如下
在这里插入图片描述
文本文件流一次流读取是以一个空格为结束,所以保存时在数据中间加入空格

#define  SAVE_DATA          "J_SAVE.dat"
double XX_Angle=180.1;
CvPoint2D32f OffsetPos(1.1,50.5);
/*实现保存程序运行的数据*/
void MainWindow::saveData()
{
    QFile ExpandData(SAVE_DATA);
    if(ExpandData.open(QIODevice::WriteOnly))
    {
        /*文本输出流,用于保存数据*/
        QTextStream Out(&ExpandData);
        /*加入空格的好处是以流的形式读取恰好是相反的操作,这样一来方便快速对参数的读取*/
        Out << XX_Angle;
        Out << ' ';
        Out << OffsetPos.x;
        Out << ' ';
        Out << OffsetPos.y;

        ExpandData.close();
    }
}
/*加载程序运行时保存的数据*/
void MainWindow::loadData()
{
    QFile ExpandData(SAVE_DATA);
    if(ExpandData.open(QIODevice::ReadOnly))
    {
        /*文本输出流,用于保存数据*/
        QTextStream In(&ExpandData);

        In >> XX_Angle;
        In >> OffsetPos.x;
        In >> OffsetPos.y;
		qDebug()<<XX_Angle<<OffsetPos.x<<OffsetPos.y;
        ExpandData.close();
    }
}

保留2位小数

QString::number(L, 'f', 2)

2.15

做好数据保存功能,便于比较不同算法的差异和复盘

参考博客

选择保存路径

// "." 代表程序运行目录 ".."上级目录 后面可以接默认文件名 
QString filename = QFileDialog::getSaveFileName(this,tr("Save Image"),"./默认文件名",
                   tr("*.bmp;; *.png;; *.jpg;; *.tif;; *.GIF")); //选择路径 ;;提供多种格式
 if(filename.isEmpty())
{ }else{ }

不能在弹出文件框设置文件名,所以只能先预设好。后来发现是因为Camera类中设置了grabKeyboard(),键盘事件都被它捕获了,其它部件即使获得焦点也不能响应键盘事件,取消后正常,但camera不能一启动就能响应键盘了。
解决:camera->setFocus(),这样程序启动后焦点就在camera上,可以响应键盘事件。camera的focusPolicy设为StrongFocus,其它子控件设为NoFocus,否则setFocus()会有子控件被设为当前焦点。

选择要打开的文件

单个文件

QString filename=QFileDialog::getOpenFileName(this, "打开文件", "","*.dat");

多个文件

QStringList filenames=QFileDialog::getOpenFileNames(this, "打开文件", "","*.dat");
for (auto tmp : fileNames)
{
   QString filename=tmp;
   //对文件的操作
}

查找整个文件夹文件并筛选

/*******************************
 *        导入文件夹的图片
 * ****************************/
void Camera::on_openDirBt_clicked()
{
    QString srcDir = QFileDialog::getExistingDirectory(this,"选取文件夹", "./");
    SourceDir.setPath(srcDir);
    SourceDir.setFilter(QDir::Files | QDir::NoSymLinks);
    //QStringList FilesList = SourceDir.entryList();


    QStringList ImgFilter;
    //过滤器
    ImgFilter << "*.JPG"<<"*.png";
    //定义迭代器并设置过滤器
    QDirIterator dir_iterator(srcDir, ImgFilter, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
    while (dir_iterator.hasNext())
    {
        dir_iterator.next();
        QFileInfo file_info = dir_iterator.fileInfo();
        QString file_path = file_info.absoluteFilePath();
        SourceFilesList.append(file_path);
    }

    CurImgNum = 0;
    ui->curImgNumLabel->setText(QString::number(CurImgNum+1)+" / "+
                               QString::number(SourceFilesList.size()));
}

//上一张
void Camera::on_ThumbRightBtn_clicked()
{
    CurImgNum = (CurImgNum==SourceFilesList.size()-1)? 0 : CurImgNum+1;
    QString curImgPath = SourceFilesList.at(CurImgNum);
    
    //获取图片
    Mat img=imread( curImgPath.toStdString()) ;
    imgProcess(img);

    ui->curImgNumLabel->setText(QString::number(CurImgNum+1)+" / "+
                               QString::number(SourceFilesList.size()));
}
//下一张
void Camera::on_ThumbLeftBtn_clicked()
{
    CurImgNum = (CurImgNum==0)? SourceFilesList.size()-1 : CurImgNum-1;
    QString curImgPath = SourceFilesList.at(CurImgNum);
    //获取图片
    Mat img=imread( curImgPath.toStdString()) ;
    imgProcess(img);

    ui->curImgNumLabel->setText(QString::number(CurImgNum+1)+" / "+
                               QString::number(SourceFilesList.size()));
}

windows的文件路径分隔符是\,而linux的分隔符为/,
要实现window下编写的程序直接应用到linux下, 在构造文件路径时,可以用QDir::toNativeSeparators

file_path = QDir::toNativeSeparators(file_path);

图片QPixmap保存

新建一个空QPixmap图片并填充

QPixmap eyePix=QPixmap(40,30);
eyePix.fill(Qt::transparent);

保存,注意图片格式要大写

   eyePix.save(QString::number(CurImgNum),"PNG");
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值