利用主窗口类实现,QT版:记事本。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QCloseEvent>
#include <QTextEdit>
#include <QMenu>
#include <QMenuBar>
#include <QAction>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void openfile();
void newfile();
void savefile();
void exitfile();
void copyfile();
void cutfile();
void pastefile();
private:
void createMenus();
void createActions();
void closeEvent(QCloseEvent *event);
QTextEdit *text;
QMenu *fileMenu;
QMenu *editMenu;
QAction *openFileAction;
QAction *newFileAction;
QAction *saveFileAction;
QAction *exitFileAction;
QAction *copyFileAction;
QAction *cutFileAction;
QAction *pasteFileAction;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QMessageBox>
#include <QFileDialog>
#include <QTextStream>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle("记事本");
text = new QTextEdit(this);
this->setCentralWidget(text);
text->setFontPointSize(20);//设置默认字体大小
createActions();
createMenus();
}
MainWindow::~MainWindow()
{
}
void MainWindow::openfile()
{
QString filename = QFileDialog::getOpenFileName(this, tr("打开文件"));
if (filename.isEmpty())//如果没有选择要打开的文件名,函数退出
{
return ;
}
QFile data(filename);
if (data.open(QFile::ReadOnly))//以只读方式打开文件
{
text->clear();//首先将text空间内容清空
QTextStream stream(&data);
while (!stream.atEnd())//循环读取文件按,直到文件尾结束循环
{
text->append(stream.readLine());//在text控件内容尾部追加从文件中读取的内容
}
data.close();//读完文件后关闭文件
}else
{
QMessageBox::critical(this, tr("错误"), data.errorString());
}
}
void MainWindow::newfile()
{
text->clear();
}
void MainWindow::savefile()
{
QString filename = QFileDialog::getSaveFileName(this, tr("保存文件"));
if (filename.isEmpty())//如果没有选择文件,函数退出
{
return ;
}
QFile data(filename);
if (data.open(QFile::WriteOnly | QFile::Truncate))//以写方式打开文件,如果关键存在,则是追加模式
{
QTextStream stream(&data);
stream<<text->toPlainText();//将text控件内容转化为QString后,写入文件
data.close();
}
else
{
QMessageBox::critical(this, tr("错误"), data.errorString());
}
}
void MainWindow::exitfile()
{
close();
//exit(0);//直接退出
}
void MainWindow::copyfile()
{
text->copy();
}
void MainWindow::cutfile()
{
text->cut();
}
void MainWindow::pastefile()
{
text->paste();
}
void MainWindow::createMenus()
{
fileMenu = menuBar()->addMenu(tr("文件"));//建立文件菜单
fileMenu->addAction(openFileAction);
fileMenu->addAction(newFileAction);
fileMenu->addAction(saveFileAction);
fileMenu->addSeparator();//加入一个分隔符
fileMenu->addAction(exitFileAction);
editMenu = menuBar()->addMenu(tr("编辑"));
editMenu->addAction(copyFileAction);
editMenu->addAction(cutFileAction);
editMenu->addAction(pasteFileAction);
}
void MainWindow::createActions()
{
openFileAction = new QAction(tr("打开"), this);
openFileAction->setShortcut(tr("Ctrl+o"));
connect(openFileAction, SIGNAL(triggered()), this, SLOT(openfile()));
newFileAction = new QAction(tr("新建"), this);
newFileAction->setShortcut(tr("Ctrl+N"));
connect(newFileAction, SIGNAL(triggered()), this, SLOT(newfile()));
saveFileAction = new QAction(tr("保存"), this);
saveFileAction->setShortcut(tr("Ctrl+s"));
connect(saveFileAction, SIGNAL(triggered()), this, SLOT(savefile()));
exitFileAction = new QAction(tr("退出"), this);
exitFileAction->setShortcut(tr("Ctrl+q"));
connect(exitFileAction, SIGNAL(triggered()), this, SLOT(exitfile()));
copyFileAction = new QAction(tr("复制"), this);
copyFileAction->setShortcut(tr("Ctrl+c"));
connect(copyFileAction, SIGNAL(triggered()), this, SLOT(copyfile()));
cutFileAction = new QAction(tr("剪切"), this);
cutFileAction->setShortcut(tr("Ctrl+x"));
connect(cutFileAction, SIGNAL(triggered()), this, SLOT(cutfile()));
pasteFileAction = new QAction(tr("粘贴"), this);
pasteFileAction->setShortcut(tr("Ctrl+v"));
connect(pasteFileAction, SIGNAL(triggered()), this, SLOT(pastefile()));
}
void MainWindow::closeEvent(QCloseEvent *event)
{
QMessageBox::StandardButton button;
button = QMessageBox::question(this, tr("退出程序"), QString(tr("是否退出")),
QMessageBox::Yes | QMessageBox::No);
if (button == QMessageBox::Yes)
{
event->accept();//接受退出信号,程序退出
}else
{
event->ignore();//忽略退出信息,程序继续运行
}
}
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.resize(600, 400);
w.show();
return a.exec();
}