`

Qt的文本文件读写

    博客分类:
  • Qt
 
阅读更多
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <boost/scoped_ptr.hpp>
using namespace boost;


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void readFile(const QString& fileName);
    void writeFile(const QString& fileName);
public slots:
    void open();
    void save();
    void saveAs();
    void close();
    void quit();
protected:
    void dragEnterEvent(QDragEnterEvent *);
    void dropEvent(QDropEvent *);
private:
    class MainWindowUi;
    scoped_ptr<MainWindowUi> mui;
    class MainWindowData;
    scoped_ptr<MainWindowData> mData;
};

#endif // MAINWINDOW_H



mainwindow.cpp
#include <QFileDialog>
#include <QString>
#include <QTextStream>
#include <QCloseEvent>
#include <QDesktopWidget>
#include <QUrl>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
using namespace std;

class MainWindow::MainWindowData{
public:
    QString mFileName;
    QString mText;
    QFile mFile;
    QTextStream mStream;
};

class MainWindow::MainWindowUi:public Ui::MainWindow{
public:
    QFileDialog* mFileDialog;
public:
    MainWindowUi(){

    }
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    mui.reset(new MainWindowUi);
    mui->setupUi(this);
    mData.reset(new MainWindowData);
    mui->mFileDialog = new QFileDialog(this);
    mui->textEdit->setAcceptDrops(false);
    setAcceptDrops(true);
    //把所有action与对应的槽相连
    connect(mui->action_open, SIGNAL(triggered()), this, SLOT(open()));
    connect(mui->action_save, SIGNAL(triggered()), this ,SLOT(save()));
    connect(mui->actionSave_As, SIGNAL(triggered()), this ,SLOT(saveAs()));
    connect(mui->action_close,SIGNAL(triggered()), this, SLOT(close()));
    connect(mui->action_quit, SIGNAL(triggered()), this, SLOT(quit()));
    //放到屏幕中间
    int screenCenterX =(QDesktopWidget().screenGeometry().width()-geometry().width())/2;
    int screenCenterY =(QDesktopWidget().screenGeometry().height()-geometry().height())/2;
    //宽和高就用设计器中设置的吧
    setGeometry(screenCenterX,screenCenterY,width(),height());
}

/*
  根据文件名读文本文件
*/
void MainWindow::readFile(const QString &fileName){
    mData->mFile.setFileName(fileName);
    if(!mData->mFile.open(QIODevice::ReadOnly|QIODevice::Text))
        return;
    //怕文件太大,一行一行地读
    mData->mStream.setDevice(&mData->mFile);
    QString line = mData->mStream.readLine();
    while(not line.isNull()){
        mData->mText.append(line).append("\n");
        line = mData->mStream.readLine();
    }
    //读完得关了它,最好一开始就写上,我在测试writeFile能否读text时没写后面的代码,
    //结果一关程序就把我的源码清空了2个才发现,悲剧啊...
    mData->mFile.close();
    mui->textEdit->clear();
    mui->textEdit->setText(mData->mText);
}

/*
  根据文件名写文本文件
*/
void MainWindow::writeFile(const QString &fileName){
    mData->mFile.setFileName(fileName);
    if(not mData->mFile.open(QIODevice::WriteOnly|QIODevice::Truncate))
        return;//can not write
    mData->mStream.setDevice(&mData->mFile);
    QStringList currentTextList = mui->textEdit->toPlainText().split("\n");
    foreach(QString str,currentTextList){
        mData->mStream << str << "\n";
    }
    mData->mFile.close();
}

void MainWindow::open(){
    mData->mFileName = mui->mFileDialog->getOpenFileName(this,tr("Open File"),//这个对话框的标题
                                                    "/home/xiangjie/code/unix/T1/",
                                                    tr("files(*.c *.cc *.cpp *.txt)"));//这里相当于是过滤器
    readFile(mData->mFileName);
}

/*
  保存
  */
void MainWindow::save(){
    if(mData->mFileName.isNull())
        return;
    writeFile(mData->mFileName);
}

/*
  另存为
  */
void MainWindow::saveAs(){
    mData->mFileName = mui->mFileDialog->getSaveFileName(this,tr("Save File"),
                                                         "/home/xiangjie/code",
                                                         tr("files(*.c *.cc *.cpp *.txt)"));
    save();
}

/*
  清空textEdit和fileName
 */
void MainWindow::close(){
    mui->textEdit->clear();
    mData->mFileName.clear();
}

/*
  关闭所有窗口
*/
void MainWindow::quit(){
    qApp->closeAllWindows();
}

/*
 拖放
 */
void MainWindow::dragEnterEvent(QDragEnterEvent *event){
    if(event->mimeData()->hasFormat("text/uri-list"))
        event->acceptProposedAction();
}

void MainWindow::dropEvent(QDropEvent *event){
    QList<QUrl> urls = event->mimeData()->urls();
    if(urls.isEmpty())
        return;
    QString fileName = urls.first().toLocalFile();
    if(fileName.isEmpty())
        return;
    readFile(fileName);
    setWindowTitle(tr("%1-%2").arg(fileName).arg(tr("Drag file")));
}

MainWindow::~MainWindow()
{
}




main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}







  • 大小: 64.3 KB
  • 大小: 95.5 KB
分享到:
评论

相关推荐

    QT文本文件读写应用程序示例

    Qt提供了两种读写纯文本文件的基本方法,一种是用QFile类的IODevice读写功能直接进行读写,另一种是利用QFile和QTextStream结合起来,用流(Stream)的方法进行文件读写。 实例samp7_1演示了这两种方法读写文本文件...

    Qt多线程读写大型文本文件项目

    2.读取文本文件,显示到桌面控件中; 3.读取的文件使用多线程处理,不影响显示界面正常操作; 4.读取过来的文件如有修改,需要保存修改部分; 5.读、写文件需要显示处理进度; 6.增加一个列表,用于展示文本文件的...

    Qt之读写ini文件

    在Qt框架中,读写`.ini`配置文件是常见的任务,尤其在开发桌面应用程序时,这些文件用于存储用户的个性化设置或应用的配置信息。本文将详细介绍如何使用Qt库中的`QSettings`类来处理`.ini`文件,以及解决中文字符串...

    Qt txt文件读写

    在Qt框架中,进行文本文件(如txt)的读写操作是常见的任务,这涉及到对文件系统的操作和数据流的处理。以下将详细介绍Qt中如何实现txt文件的选择、读取和写入。 首先,Qt提供了QFile类来处理文件操作,如打开、...

    使用qt对中文文本进行读写并显示在主窗口视图中

    Qt支持多种文件操作类,如`QFile`用于文件的基本操作,`QTextStream`用于文本的读写,特别适合处理包含中文字符的文件。`QTextStream`能自动处理编码问题,确保中文字符不被错误解析。 1. **中文文本读取**: - ...

    Qt,docx文件读写

    在本主题中,我们将聚焦于Qt如何实现对Microsoft Office的.docx文件进行读写操作。 首先,理解.docx文件格式至关重要。.docx文件是基于Open XML标准的,实际上是一个压缩的ZIP文件,包含XML文档、样式表、图像和...

    Qt移动开发-Android上实现本地文件读写.zip

    总结起来,Qt 5.12.6在Android上的本地文件读写涉及了Android权限管理、Qt的文件操作类以及路径管理。通过正确地申请权限并使用Qt提供的API,开发者可以在Android设备上创建、读取和写入文件,实现功能丰富的移动...

    Qt实现GUI的二进制文件读写操作(源码分析+工程打包+测试例子)

    在本文中,我们将深入探讨如何使用Qt库进行GUI界面下的二进制文件读写操作,同时结合源码分析、工程打包以及测试实例来全面理解这一主题。Qt是一个跨平台的应用程序开发框架,广泛用于创建图形用户界面和其他软件。...

    QT读写文件内容

    在QT中处理文件读写是非常基础且重要的功能,对于任何需要与本地文件系统交互的应用程序来说都必不可少。下面我们将深入探讨QT如何进行文件读写操作。 一、QT中的文件读取 在QT中,我们可以使用`QFile`类来操作...

    Qt 基于QFile 读写ini文件(包含QFile读取行,修改行数据,删除行数据)

    2. 使用QTextStream进行流式读写,这样可以方便地处理文本数据。创建一个QTextStream对象,传入已打开的QFile对象。 3. 遍历文件,找到要修改的行。可以使用`atEnd()`检查是否到达文件末尾,`next()`或`readLine()`...

    Qt 线程串口读写串口数据

    在这个文件中,我们可能会定义一个继承自`QWidget`的类,用于构建用户交互界面,比如设置串口选择下拉框、波特率选择器、数据位、校验位、停止位等控件,并且包含打开、关闭串口的按钮,以及显示接收数据的文本区域...

    c++ qt 读写文件

    在这个场景中,我们关注的是如何在Visual Studio 2008中利用Qt来读取和写入文本文件。尽管Visual Studio 2008本身并不直接支持Qt,但可以通过安装第三方插件如QTVisualStudioTools来实现对Qt项目的集成。 首先,让...

    QT文件读写.docx

    在处理文件读写时,QT提供了丰富的类和方法,使得开发者能够方便地操作文件,包括读取和写入文本以及二进制数据。本文将深入探讨如何使用QT中的QString、QFile和QTextStream类来处理中文文件。 首先,QString是QT中...

    QT实现HEX文件操作

    在QT中,我们可以利用QFile类来处理文件读写操作。QFile提供了打开、关闭、读取和写入文件的方法。例如,使用`open()`函数打开文件,`read()`和`write()`函数读写数据,`close()`函数关闭文件。对于HEX文件,我们...

    Qt下实现文本文件解压缩功能

    在Qt环境下实现文本文件的解压缩功能,主要是利用Qt库提供的I/O操作和第三方压缩库。Qt自身并不直接支持文件的压缩与解压缩,但我们可以借助于其他开源库,如zlib、minizip或者自己编写算法来实现。在这个案例中,...

    Qt5.8 打开指定路径txt文件 读写TXT文件

    在本文中,我们将深入探讨如何使用Qt5.8框架来打开指定路径的TXT文件,并进行读写操作。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式平台。Qt5.8是其一个重要的版本,提供了丰富的功能和优化。 ...

    Qt读写文件

    总结起来,Qt通过QFile、QDir、QTextStream等类提供了强大且灵活的文件读写功能。开发者可以根据具体需求选择合适的方法,同时注意错误处理和性能优化,以实现高效且可靠的文件操作。在实际项目中,合理利用这些工具...

    QT4文本文件保存打开例程源代码

    它可以用来读写文本文件,自动处理换行、缩进等。通过`QTextStream(file)`构造一个与文件关联的流,然后使用`操作符输出文本,使用`&gt;&gt;`操作符读取文本。 5. **错误处理**: 在进行文件操作时,应始终检查是否成功。`...

    QT xml文件的读写,增减,更新。

    以上就是使用QT进行XML文件操作的基本知识点。在实际项目中,可能还需要结合其他类,如`QXmlStreamReader`和`QXmlStreamWriter`进行流式处理,或者使用`QDomNode::childNodes()`获取子节点列表等,以实现更复杂的XML...

    WBDC.rar_c text word count_单词检索_文本 检索 visual_文本文件读写

    本文将基于给定的标题“WBDC.rar_c text word count_单词检索_文本检索 visual_文本文件读写”和描述,深入探讨相关知识点,包括C语言实现文本文件的读写、单词计数和检索,以及可视化的实现。 首先,让我们关注...

Global site tag (gtag.js) - Google Analytics