打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
Qt的文本文件读写
石头记143
>《待分类1》
2013.10.06
关注
mainwindow.h
C++代码
#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
C++代码
#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
C++代码
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
qt Spreadsheet
用QT/C++写一个简易文本编辑器
Linux下 QT 实现串口通讯小实例
C/C 第29讲——用Qt实现简易计算器
qt几个窗体之间的值传递-百度文库
Qt webKit可以做什么(四)——实现本地QObject和JavaScript交互
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×