//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QTextEdit>
/*程序退出的事件*/
#include <QCloseEvent> class MainWindow : public QMainWindow
{
Q_OBJECT public:
MainWindow(QWidget *parent = );
~MainWindow();
private:
QTextEdit * edit1;
/*打开*/
QMenu *menufile;
/*编辑*/
QMenu *menuedit;
/*帮助*/
QMenu *menuhelper;
/*打开文件*/
QAction *openfilea;
/*创建文件*/
QAction *newfile;
/*保存文件*/
QAction *savefilea;
/*退出*/
QAction * exitprof;
/*复制*/
QAction *copyfile;
/*剪切*/
QAction *cutfile;
/*粘贴*/
QAction *pastefile;
/*关于记事本*/
QAction *lookinfo;
/*子类中重写父类退出函数,实现自定义退出*/
void closeEvent(QCloseEvent *event);
private slots:
void myopenfile();
void mycreatefile();
void mysavefile();
void myclosewin();
void mycopyfilen();
void mycutfile();
void mypastefile();
void mylookinfo();
}; #endif // MAINWINDOW_H
//main.cpp
#include "mainwindow.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.resize(,);
w.show(); return a.exec();
}
//mainwindow.cpp
#include "mainwindow.h" #include <QMessageBox>
#include <QFileDialog>
#include <QFile>
#include <QTextStream> MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle(tr("记事本")); edit1=new QTextEdit();
this->setCentralWidget(edit1);
/*设置默认字体大小*/
edit1->setFontPointSize(); openfilea=new QAction(tr("打开"),this);
openfilea->setShortcut(tr("Ctrl+O")); newfile=new QAction(tr("新建"),this);
newfile->setShortcut(tr("Ctrl+N")); savefilea=new QAction(tr("保存"),this);
savefilea->setShortcut(tr("Ctrl+S")); exitprof=new QAction(tr("退出"),this);
exitprof->setShortcut(tr("Ctrl+Q")); menufile=this->menuBar()->addMenu(tr("文件"));
menufile->addAction(openfilea);
menufile->addAction(newfile);
menufile->addAction(savefilea);
/*在保存和退出之间加入一个分隔符,为了防止用户点击过快,直接点击退出程序了,友好设计*/
menufile->addSeparator();
menufile->addAction(exitprof); connect(openfilea,SIGNAL(triggered()),this,SLOT(myopenfile()));
connect(newfile,SIGNAL(triggered()),this,SLOT(mycreatefile()));
connect(savefilea,SIGNAL(triggered()),this,SLOT(mysavefile()));
connect(exitprof,SIGNAL(triggered()),this,SLOT(myclosewin())); copyfile=new QAction(tr("复制"),this);
copyfile->setShortcut(tr("Ctrl+C")); cutfile=new QAction(tr("剪切"),this);
cutfile->setShortcut(tr("Ctrl+X")); pastefile=new QAction(tr("粘贴"),this);
pastefile->setShortcut(tr("Ctrl+V")); menuedit=this->menuBar()->addMenu(tr("编辑"));
menuedit->addAction(copyfile);
menuedit->addAction(cutfile);
menuedit->addAction(pastefile); connect(copyfile,SIGNAL(triggered()),this,SLOT(mycopyfilen()));
connect(cutfile,SIGNAL(triggered()),this,SLOT(mycutfile()));
connect(pastefile,SIGNAL(triggered()),this,SLOT(mypastefile())); lookinfo=new QAction(tr("关于记事本"),this);
lookinfo->setShortcut(tr("Ctrl+H"));
menuhelper=this->menuBar()->addMenu(tr("帮助"));
menuhelper->addAction(lookinfo);
connect(lookinfo,SIGNAL(triggered()),this,SLOT(mylookinfo()));
} MainWindow::~MainWindow()
{ } //打开文件
void MainWindow::myopenfile()
{
/*getOpenFileName不设置默认路径,那么默认路径就是当前目录*/
QString spath=QFileDialog::getOpenFileName(this,"打开文件","","文本文档(*.txt)");
if(spath.isEmpty()) return;
/*将中心控件内容清空*/
edit1->clear();
//读文本
QFile myfile(spath);
/*只读方式打开文本*/
if(myfile.open(QFile::ReadOnly))
{
QTextStream mystream(&myfile);
while(!mystream.atEnd())
{
edit1->append(mystream.readLine());//在text控件内容尾部追加从文件中读到的内容
}
/*读完文件后,关闭文件*/
myfile.close();
}else{
/*打开文件失败*/
QMessageBox::critical(this,"错误信息",myfile.errorString());
}
} //新建文件
void MainWindow::mycreatefile()
{
//清空文本
edit1->clear();
} //保存文件
void MainWindow::mysavefile()
{
/*打开保存文件对话框*/
QString spath=QFileDialog::getSaveFileName(this,"保存文件","/","文本文档(*.txt)");
if(spath.isEmpty()) return;
/*写文件*/
QFile myfile(spath);
if(myfile.open(QFile::WriteOnly|QFile::Truncate))
{
//定义文件流
QTextStream mystream(&myfile);
/*将edit1的文本内容转化成QString后写入文件*/
mystream<<edit1->toPlainText();
/*关闭文件*/
myfile.close();
}else{
//保存文件失败
QMessageBox::critical(this,"错误信息",myfile.errorString());
}
} //退出程序
void MainWindow::myclosewin()
{
this->close();
} //复制
void MainWindow::mycopyfilen()
{
//
edit1->copy();
} //剪切
void MainWindow::mycutfile()
{
//
edit1->cut();
} //粘贴
void MainWindow::mypastefile()
{
//
edit1->paste();
} //帮助信息
void MainWindow::mylookinfo()
{
//
QMessageBox::information(this,"版权信息","版权所有,禁止盗版!");
} //程序退出事件
void MainWindow::closeEvent(QCloseEvent *event)
{
if(QMessageBox::question(this,tr("退出程序"),tr("是否退出程序"),QMessageBox::Yes|QMessageBox::No,QMessageBox::No)==QMessageBox::Yes)
{
event->accept();/*接受退出信号,程序退出*/
}else
{
event->ignore();/*忽略退出信号,程序继续运行*/
}
}

QT 记事本小程序的更多相关文章

  1. Python编写的记事本小程序

    用Python中的Tkinter模块写的一个简单的记事本程序,Python2.x和Python3.x的许多内置函数有所改变,所以以下分为Python2.x和Python3.x版本. 一.效果展示: 二 ...

  2. 基于小程序云Serverless开发微信小程序

    本文主要以使用小程序云Serverless服务开发一个记事本微信小程序为例介绍如何使用小程序云Serverless开发微信小程序.记事本小程序的开发涉及到云函数调用.云数据库存储.图片存储等功能,较好 ...

  3. 微信小程序 - 实战小案例 - 简易记事本

    多项技能,好像也不错.学习一下微信小程序. 教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ 简介:一套用来开发在手机微信上运行的app框架,不用安装 组成: ...

  4. 微信小程序入门实例之记事本

    主要实现思想都在代码的注释中,项目源码见github 首先上项目目录 app.js文件代码如下: //app.js App({ onLaunch: function() { //调用API从本地缓存中 ...

  5. 12-18Windows窗体应用小程序之记事本(1)

    一.记事本制作(1) C#结合窗体制作小程序,相比较之前的控制台应用程序可能要改善了好多,最起码界面看起来可以高仿一下了,但是最重要的还是要看其里面的功能是否实现.所以,要以实现其实用功能为主.今天利 ...

  6. Qt开发经验小技巧合集

    一.开发经验总结 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它, ...

  7. Qt 设置应用程序图标

    Qt4设置应用程序图标 将一个ico图标放在资源文件夹下; 然后建立txt,输入 IDI_ICON1 DISCARABLE "myico.ico"; 保存文件,将其后缀改为.rc; ...

  8. ios开发之OC基础-oc小程序

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  9. 跟我一起,利用bitcms内容管理系统从0到1学习小程序开发:一、IIS下SSL环境搭建

    缘起 1.从事互联网十来年了,一直想把自己的从事开发过程遇到的问题给写出来,分享给大家.可是可是这只是个种想法,想想之后就放下了,写出来的类文章是少之又少.古人说无志之人常立志,有志之人立长志.今天, ...

随机推荐

  1. YUM源的简介,配置与使用

    A.yum 简介 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器.起初是由yellow dog 这一发行版的 ...

  2. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  3. Oracle Latch的学习【原创】

    Latch详解 - MaxChou 本文以学习为目的,大部分内容来自网络转载. 什么是Latch 串行化 数据库系统本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户同时操作数据库.多个 ...

  4. 简单阐述下Ajax以get方式请求的步骤 初学,不对的话,跟我说下,谢谢!

    首先, 在GET提交中"=,&"等字符与请求字符串的关键字相混淆.所以: 第一步,先对get提交过来的数据进行编码. 第二步,实例化ajax对象. 第三步,创建对服务器的连 ...

  5. PHP6连接SQLServer2005的方法

    1.修改php.ini将extension=php_mssql.dll的注释删除保存. 修改php.in将mssql.secure_connection = Off改为mssql.secure_con ...

  6. C#邮件发送问题(一)

    邮件发送需考虑很多因素,包括发送邮件客户端(一般编码实现),发送和接收邮件服务器设置等.如果使用第三方邮件服务器作为发送服务器,就需要考虑该服务器的发送限制,(如发送邮件时间间隔,单位时间内发送邮件数 ...

  7. ES6箭头函数(Arrow Functions)

    ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 1. 具有一个参数的简单函数 var single = a => a single('he ...

  8. To create my first app in iOS with Xcode(在Xcode创建我的第一个iOS app )

    To create my first app in iOS create the project. In the welcome window, click “Create a new Xcode p ...

  9. 关于response.getWriter()写回数据的实际发生时间点

    只能说自己平时太粗心了,一些细节问题虽然几次路过,都没有注意过,也没有好好想过. 同事负责的一段微信模块的小逻辑,为了防止微信服务器认为没有接收到请求而重发消息,所以再收到微信服务器发回的消息后,马上 ...

  10. 报表开发工具中mysql数据库连接编码转化失效解决方案

    1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...