第一次接触QT,但是以前学过C#也算上手比较容易了,都是控件的操作。
但第一次写还是出现了很多很纠结的问题,可能本人比较笨吧
这个界面实现的就是按一个BUTTON键打开文档,并且显示其内容到TextEdit上,按另一个BUTTON键则实现另存为功能,即把 TextEdit上的内容写到新建的或者已有的文件里,并且覆盖原有文件的内容。
注意 :Qt 不同版本可能写法不同,要自己查阅手册哦,不过 4.7这个版本的我貌似没找到中文版的
#include "my.h"
#include "ui_my.h"
#include "qfile.h"
#include "qfiledialog.h"
#include <QtDebug> //自己调试用的,在QT4.7这个版本 要使用这个
my::my(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::my)
{
ui->setupUi(this);
}
my::~my()
{
delete ui;
}
//文件的另存为功能,和下面的打开文件类似,下面给了注释的这里就不多说了
void my::on_pushButton_clicked()
{
QFileDialog textsave(this,"save");
textsave.setAcceptMode(QFileDialog::AcceptSave); // 关于 这条语句,我之前查阅手册的时候看见的是他给OpenFile写的,默认值为0,
//所以手册里就没有定义,如果你要使用Save的话就自行定义一下吧
textsave.setFileMode(QFileDialog::AnyFile);
textsave.setViewMode(QFileDialog::Detail);
QStringList qt;
if(textsave.exec())
{
qt = textsave.selectedFiles();
}
QFile file(qt.at(0));
file.open(QIODevice::WriteOnly);
QTextStream ts(&file);
ts << ui->textEdit->toPlainText();//读取TextEdit的 内容 之前有看见其他版本用text();
//但在这里我找了好久只找到这个;
ui->textEdit->clear();
}
void my::on_pushButton_2_clicked()
{
//文件目录显示 QFileDialog只是其中一种 还可以使用QDir等
QFileDialog dialog(this,"open");
dialog.setFileMode(QFileDialog::AnyFile);//可设置不存在的文件,如果要选择存在的用Existing
dialog.setNameFilter(tr("Text files (*.txt);;Images (*.png *.xpm *.jpg);;
All C++ files (*.cpp *.cc *.C *.cxx *.c++);;O wenjian(*.o)"));
//过滤器,不设置则显示所有
dialog.setViewMode(QFileDialog::Detail);//Detail详细,list简单列出。
QStringList fd;
if(dialog.exec()) //弹出对话框
fd = dialog.selectedFiles();
qDebug()<<fd;
//文件内容显示
QFile hello(fd.at(0));//把QSringList 转成 String
hello.open(QIODevice::ReadOnly| QIODevice::Text);//QIODevice类是输入/输出设备的基类
QTextStream myStream(&hello); //QTextStream类提供了使用QIODevice读写文本的基本功能
QString str ;
while(myStream.atEnd()==0)
{
str = myStream.readLine();
ui->textEdit->append(str); //Append()附加,还可以有很多方式 可以自己查询手册。
//例如用SetText()的话会覆盖掉原来的
}
qDebug()<<str;
hello.close();
}
以上写的只是QFileDialog的其中一种写法,手册里提供了两种
还有一种静态函数的方法
fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));
看上去更简洁,只是我比较执着于这个而已。。