MainWindow.cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QTextEdit>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void open();
void close();
private:
Ui::MainWindow *ui;
QAction *openAction;
QAction *saveAction;
QTextEdit *textEdit;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QMenuBar"
#include"QAction"
#include"QMessageBox"
#include"QMenuBar"
#include"QToolBar"
#include"QStatusBar"
#include"QDebug"
#include<QTextEdit>
#include<QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
openAction=new QAction(QIcon(":/images/file-open"),tr("&Open"),this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip("open new file");
connect(openAction,SIGNAL(triggered()),
this,SLOT(open()));
saveAction=new QAction(QIcon(":/images/doc-open"),tr("&Save"),this);
saveAction->setShortcut(QKeySequence::Save);
saveAction->setStatusTip("save the file");
connect(saveAction,SIGNAL(triggered()),
this,SLOT(close()));
QMenu *fileOpen=menuBar()->addMenu(tr("&File"));
fileOpen->addAction(openAction);
QToolBar *toolBar= addToolBar(tr("&File"));
toolBar->addAction(openAction);
toolBar->addAction(saveAction);
/*QToolBar *toolBar2= addToolBar(tr("&Save"));
toolBar2->addAction(saveAction);
*/
statusBar();
textEdit=new QTextEdit;
setCentralWidget(textEdit);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::open()
{
/*
QMessageBox msgBox;
msgBox.setText(tr("The decument has been modified"));
msgBox.setInformativeText(tr("Do you want to save your changes"));
msgBox.setDetailedText(tr("Differences here......"));
msgBox.setStandardButtons(QMessageBox::Yes
|QMessageBox::No
|QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Cancel);
int ret=msgBox.exec();
switch(ret)
{
case QMessageBox::Yes:
break;
case QMessageBox::No:
break;
case QMessageBox::Cancel:
break;
}*/
QString path=QFileDialog::getOpenFileName(this,
tr("Open File"),
"/",
tr("Text Files(*.txt)"));
if(!path.isEmpty())
{
QFile file(path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox::information(this,tr("faile"),tr("open file faile"));
return ;
}
QTextStream in(&file);
textEdit->setText(in.readAll());
file.close();
}
else
{
QMessageBox::information(this,tr("faile"),tr("you not open any file"));
}
}
void MainWindow::close()
{
/*
QDialog *dialog=new QDialog(this);
dialog->setWindowTitle("Do you sure close window?");
dialog->exec();
QMessageBox::information(this,tr("can use"),tr("can ues"));
*/
// qDebug()<<dialog->result();
QString path=QFileDialog::getOpenFileName(this,
tr("Open File"),
"/",
tr("Text Files(*.txt)"));
if(!path.isEmpty())
{
QFile file(path);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::warning(this,tr("Write File"),tr("Cant open file \n%1").arg(path));
return ;
}
QTextStream out(&file);
out<<textEdit->toPlainText();
file.close();
}
else
{
QMessageBox::information(this,tr("faile"),tr("save faile"));
}
}
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();
}
基于QT的简单文本编辑器,只是实现了简单的打开和保存功能。
函数:
QString getOpenFileName(QWidget *parent=0,
const QString &caption=QSting(),
const QString &dir=QString(),
const QString &filter=QString(),
QString *selectedFilter=0,
Options options=0);
第一个参数parent,用于指定父组件。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0;
第二个参数caption,是对话框的标题;
第三个参数dir,是对话框显示时默认打开的目录,”.” 代表程序运行目录,”/” 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如”C:\”等;例如我想打开程序运行目录下的Data文件夹作为默认打开路径,这里应该写成”./Data/”,若想有一个默认选中的文件,则在目录后添加文件名即可:”./Data/teaser.graph”
第四个参数filter,是对话框的后缀名过滤器,比如我们使用”Image Files(.jpg .png)”就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用”;;”分割,比如”JPEG Files(.jpg);;PNG Files(.png)”;
第五个参数selectedFilter,是默认选择的过滤器;
第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
如果我要想选择多个文件怎么办呢?Qt提供了getOpenFileNames()函数,其返回值是一个QStringList。你可以把它理解成一个只能存放QString的List,也就是STL中的list。