分享

Qt的文本文件读写

 石头记143 2013-10-06
     mainwindow.h
C++代码  收藏代码
  1. #ifndef MAINWINDOW_H  
  2. #define MAINWINDOW_H  
  3.   
  4. #include <QMainWindow>  
  5. #include <boost/scoped_ptr.hpp>  
  6. using namespace boost;  
  7.   
  8.   
  9. class MainWindow : public QMainWindow  
  10. {  
  11.     Q_OBJECT  
  12.   
  13. public:  
  14.     explicit MainWindow(QWidget *parent = 0);  
  15.     ~MainWindow();  
  16.     void readFile(const QString& fileName);  
  17.     void writeFile(const QString& fileName);  
  18. public slots:  
  19.     void open();  
  20.     void save();  
  21.     void saveAs();  
  22.     void close();  
  23.     void quit();  
  24. protected:  
  25.     void dragEnterEvent(QDragEnterEvent *);  
  26.     void dropEvent(QDropEvent *);  
  27. private:  
  28.     class MainWindowUi;  
  29.     scoped_ptr<MainWindowUi> mui;  
  30.     class MainWindowData;  
  31.     scoped_ptr<MainWindowData> mData;  
  32. };  
  33.   
  34. #endif // MAINWINDOW_H  


mainwindow.cpp
C++代码  收藏代码
  1. #include <QFileDialog>  
  2. #include <QString>  
  3. #include <QTextStream>  
  4. #include <QCloseEvent>  
  5. #include <QDesktopWidget>  
  6. #include <QUrl>  
  7. #include "mainwindow.h"  
  8. #include "ui_mainwindow.h"  
  9. #include <iostream>  
  10. using namespace std;  
  11.   
  12. class MainWindow::MainWindowData{  
  13. public:  
  14.     QString mFileName;  
  15.     QString mText;  
  16.     QFile mFile;  
  17.     QTextStream mStream;  
  18. };  
  19.   
  20. class MainWindow::MainWindowUi:public Ui::MainWindow{  
  21. public:  
  22.     QFileDialog* mFileDialog;  
  23. public:  
  24.     MainWindowUi(){  
  25.   
  26.     }  
  27. };  
  28.   
  29. MainWindow::MainWindow(QWidget *parent) :  
  30.     QMainWindow(parent)  
  31. {  
  32.     mui.reset(new MainWindowUi);  
  33.     mui->setupUi(this);  
  34.     mData.reset(new MainWindowData);  
  35.     mui->mFileDialog = new QFileDialog(this);  
  36.     mui->textEdit->setAcceptDrops(false);  
  37.     setAcceptDrops(true);  
  38.     //把所有action与对应的槽相连  
  39.     connect(mui->action_open, SIGNAL(triggered()), this, SLOT(open()));  
  40.     connect(mui->action_save, SIGNAL(triggered()), this ,SLOT(save()));  
  41.     connect(mui->actionSave_As, SIGNAL(triggered()), this ,SLOT(saveAs()));  
  42.     connect(mui->action_close,SIGNAL(triggered()), this, SLOT(close()));  
  43.     connect(mui->action_quit, SIGNAL(triggered()), this, SLOT(quit()));  
  44.     //放到屏幕中间  
  45.     int screenCenterX =(QDesktopWidget().screenGeometry().width()-geometry().width())/2;  
  46.     int screenCenterY =(QDesktopWidget().screenGeometry().height()-geometry().height())/2;  
  47.     //宽和高就用设计器中设置的吧  
  48.     setGeometry(screenCenterX,screenCenterY,width(),height());  
  49. }  
  50.   
  51. /* 
  52.   根据文件名读文本文件 
  53. */  
  54. void MainWindow::readFile(const QString &fileName){  
  55.     mData->mFile.setFileName(fileName);  
  56.     if(!mData->mFile.open(QIODevice::ReadOnly|QIODevice::Text))  
  57.         return;  
  58.     //怕文件太大,一行一行地读  
  59.     mData->mStream.setDevice(&mData->mFile);  
  60.     QString line = mData->mStream.readLine();  
  61.     while(not line.isNull()){  
  62.         mData->mText.append(line).append("\n");  
  63.         line = mData->mStream.readLine();  
  64.     }  
  65.     //读完得关了它,最好一开始就写上,我在测试writeFile能否读text时没写后面的代码,  
  66.     //结果一关程序就把我的源码清空了2个才发现,悲剧啊...  
  67.     mData->mFile.close();  
  68.     mui->textEdit->clear();  
  69.     mui->textEdit->setText(mData->mText);  
  70. }  
  71.   
  72. /* 
  73.   根据文件名写文本文件 
  74. */  
  75. void MainWindow::writeFile(const QString &fileName){  
  76.     mData->mFile.setFileName(fileName);  
  77.     if(not mData->mFile.open(QIODevice::WriteOnly|QIODevice::Truncate))  
  78.         return;//can not write  
  79.     mData->mStream.setDevice(&mData->mFile);  
  80.     QStringList currentTextList = mui->textEdit->toPlainText().split("\n");  
  81.     foreach(QString str,currentTextList){  
  82.         mData->mStream << str << "\n";  
  83.     }  
  84.     mData->mFile.close();  
  85. }  
  86.   
  87. void MainWindow::open(){  
  88.     mData->mFileName = mui->mFileDialog->getOpenFileName(this,tr("Open File"),//这个对话框的标题  
  89.                                                     "/home/xiangjie/code/unix/T1/",  
  90.                                                     tr("files(*.c *.cc *.cpp *.txt)"));//这里相当于是过滤器  
  91.     readFile(mData->mFileName);  
  92. }  
  93.   
  94. /* 
  95.   保存 
  96.   */  
  97. void MainWindow::save(){  
  98.     if(mData->mFileName.isNull())  
  99.         return;  
  100.     writeFile(mData->mFileName);  
  101. }  
  102.   
  103. /* 
  104.   另存为 
  105.   */  
  106. void MainWindow::saveAs(){  
  107.     mData->mFileName = mui->mFileDialog->getSaveFileName(this,tr("Save File"),  
  108.                                                          "/home/xiangjie/code",  
  109.                                                          tr("files(*.c *.cc *.cpp *.txt)"));  
  110.     save();  
  111. }  
  112.   
  113. /* 
  114.   清空textEdit和fileName 
  115.  */  
  116. void MainWindow::close(){  
  117.     mui->textEdit->clear();  
  118.     mData->mFileName.clear();  
  119. }  
  120.   
  121. /* 
  122.   关闭所有窗口 
  123. */  
  124. void MainWindow::quit(){  
  125.     qApp->closeAllWindows();  
  126. }  
  127.   
  128. /* 
  129.  拖放 
  130.  */  
  131. void MainWindow::dragEnterEvent(QDragEnterEvent *event){  
  132.     if(event->mimeData()->hasFormat("text/uri-list"))  
  133.         event->acceptProposedAction();  
  134. }  
  135.   
  136. void MainWindow::dropEvent(QDropEvent *event){  
  137.     QList<QUrl> urls = event->mimeData()->urls();  
  138.     if(urls.isEmpty())  
  139.         return;  
  140.     QString fileName = urls.first().toLocalFile();  
  141.     if(fileName.isEmpty())  
  142.         return;  
  143.     readFile(fileName);  
  144.     setWindowTitle(tr("%1-%2").arg(fileName).arg(tr("Drag file")));  
  145. }  
  146.   
  147. MainWindow::~MainWindow()  
  148. {  
  149. }  


main.cpp
C++代码  收藏代码
  1. #include <QtGui/QApplication>  
  2. #include "mainwindow.h"  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     MainWindow w;  
  8.     w.show();  
  9.     return a.exec();  
  10. }  






    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多