EditWindow.cpp
#include "EditWindow.h"
#include <QtGui/QApplication>
#include <QtGui/QTextEdit>
#include <QtGui/QAction>
#include <QtGui/QAction>
#include <QtGui/QFileDialog>
#include <QtGui/QMessageBox>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QToolBar>
#include <QtCore/QFile>
#include <QtCore/QString>
#include <QtCore/QTextStream>
#include <QtCore/QIODevice>
#include <QtCore/QTextCodec>
EditWindow :: EditWindow()
{
setWindowTitle(tr("EditWindow"));
text=new QTextEdit(this);
setCentralWidget(text);
createActions();
createMenus();
createToolBars();
}
void EditWindow :: createActions()
{
fileOpenAction=new QAction(tr("Open"), this);
fileOpenAction->setShortcut(tr("Ctrl+O"));
fileOpenAction->setStatusTip(tr("open a file"));
connect(fileOpenAction, SIGNAL(triggered()), this, SLOT(slotOpenFile()));
fileNewAction=new QAction(tr("New"), this);
fileNewAction->setShortcut(tr("Ctrl+N"));
fileNewAction->setStatusTip(tr("new file"));
connect(fileNewAction, SIGNAL(triggered()), this, SLOT(slotNewFile() ) );
fileSaveAction=new QAction(tr("Save"), this);
fileSaveAction->setShortcut(tr("Ctrl+S"));
fileSaveAction->setStatusTip(tr("save file"));
connect(fileSaveAction, SIGNAL(activated()), this, SLOT(slotSaveFile()));
exitAction=new QAction(tr("Exit"), this);
exitAction->setShortcut(tr("Ctrl+Q"));
exitAction->setStatusTip(tr("exit"));
connect(exitAction, SIGNAL(triggered()), this, SLOT(slotClose()) );
cutAction=new QAction(tr("Cut"), this);
cutAction->setShortcut(tr("Ctrl+C"));
copyAction->setStatusTip(tr("copy to clipboard"));
connect(copyAction, SIGNAL(triggered()), text, SLOT(slotCopy()));
pasteAction=new QAction(tr("Paste"), this);
pasteAction->setShortcut(tr("Ctrl+V"));
pasteAction->setStatusTip(tr("paste clipboard to selection"));
connect(pasteAction, SIGNAL(triggered()), text, SLOT(slotPaste()));
aboutAction=new QAction(tr("About"), this);
connect(aboutAction, SIGNAL(triggered()), this, SLOT(slotAbout()));
}
void EditWindow :: createMenus()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
fileMenu=menuBar()->addMenu(codec->toUnicode("文件"));
fileMenu->addAction(fileNewAction);
fileMenu->addAction(fileOpenAction);
fileMenu->addAction(fileSaveAction);
fileMenu->addAction(exitAction);
editMenu=menuBar()->addMenu(codec->toUnicode("编辑"));
editMenu->addAction(copyAction);
editMenu->addAction(cutAction);
editMenu->addAction(pasteAction);
aboutMenu=menuBar()->addMenu(codec->toUnicode("帮助"));
aboutMenu->addAction(aboutAction);
}
void EditWindow :: createToolBars()
{
fileToolBar=addToolBar("File");
fileToolBar->addAction(fileNewAction);
fileToolBar->addAction(fileOpenAction);
fileToolBar->addAction(fileSaveAction);
editToolBar=addToolBar("Edit");
editToolBar->addAction(copyAction);
editToolBar->addAction(cutAction);
editToolBar->addAction(pasteAction);
}
void EditWindow :: slotNewFile()
{
EditWindow *newWin=new EditWindow;
newWin->show();
}
void EditWindow :: loadFile(const QString &fileName)
{
// printf("file name: %s\n", fileName.data());
QFile file(fileName);
if(file.open( QIODevice :: ReadOnly | QIODevice :: Text ))
{
QTextStream textStream(&file);
while(!textStream.atEnd())
{
text->append(textStream.readLine());
printf("read line \n");
}
printf("end\n");
}
}
void EditWindow :: slotOpenFile()
{
QString fileName= QFileDialog :: getOpenFileName(this);
if(!fileName.isEmpty())
{
if(text->document()->isEmpty())
loadFile(fileName);
else
{
EditWindow *newWin=new EditWindow;
newWin->show();
newWin->loadFile(fileName);
}
}
}
void EditWindow :: fileSave(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QMessageBox::warning(this, tr("Editor"),
tr("Cannot write file %1:\n%2.")
.arg(file.fileName())
.arg(file.errorString()));
}
QTextStream out(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
out << text->toPlainText();
QApplication::restoreOverrideCursor();
}
void EditWindow :: slotSaveFile()
{
QString fn = QFileDialog::getSaveFileName(this, tr("Save as..."),
QString(), tr("TXT files (*.txt);;C/CPP files (*.c *.cpp);;All Files (*)"));
if (!fn.isEmpty())
{
if (! (fn.endsWith(".txt", Qt::CaseInsensitive) || fn.endsWith(".cpp", Qt::CaseInsensitive) || fn.endsWith(".c", Qt::CaseInsensitive) ) )
fn += ".txt"; // default
fileSave(fn);
}
}
void EditWindow :: slotCopy()
{
text->copy();
}
void EditWindow :: slotPaste()
{
text->paste();
}
void EditWindow :: slotCut()
{
text->cut();
}
void EditWindow :: slotAbout()
{
QMessageBox::about(this, tr("About Editor"),
tr("<h2>Editor 1.1</h2>"
"<p>Copyright © 2009 Software Inc."
"<p>Editor is a small application that demonstrates "
));
}
void EditWindow :: slotClose()
{
}
EditWindow.h
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QToolBar>
#include <QtGui/QAction>
#include <QtGui/QTextEdit>
#include <QtCore/QString>
class EditWindow : public QMainWindow
{
Q_OBJECT
public:
EditWindow();
void createMenus();
void createActions();
void createToolBars();
void loadFile(const QString &str);
void fileSave(const QString &fileName);
public slots:
void slotNewFile();
void slotOpenFile();
void slotSaveFile();
void slotClose();
void slotCopy();
void slotCut();
void slotPaste();
void slotAbout();
private:
QMenu *fileMenu;
QMenu *editMenu;
QMenu *aboutMenu;
QToolBar *fileToolBar;
QToolBar *editToolBar;
QAction *fileOpenAction;
QAction *fileNewAction;
QAction *fileSaveAction;
QAction *exitAction;
QAction *copyAction;
QAction *cutAction;
QAction *pasteAction;
QAction *aboutAction;
QTextEdit *text;
};
main.cpp
#include <QtGui/QApplication>
#include "EditWindow.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
EditWindow EditWin;
EditWin.show();
return app.exec();
}