区别于之前创建爱的各个工程,这次我们在这里选择基类为QMainWindow。

然后默认目录就是

直接到对应文件中进行代码的书写:

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.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QTextEdit>
#include <QMenuBar>
#include <QMenu>
#include <QFileDialog> class MainWindow : public QMainWindow
{
Q_OBJECT public:
MainWindow(QWidget *parent = );
~MainWindow(); private:
bool isChanged;
QString fileNameString;//文件名字
QTextEdit *text1;//这里是一个指针不要忘记了。总是在这个地方出现问题。 QMenu *fileMenu;//文件下拉菜单 QAction *newFile;//新建文件。
QAction *openFile;//打开文件。
QAction *saveFile;//保存文件。
QAction *quitFile;//推出。 QMenu *editMenu;//编辑菜单
QAction *copyEdit;
QAction *pasteEdit;
QAction *cutEdit;
QAction *allSelectEdit; QMenu *helpMenu;//帮助菜单
QAction *aboutSoftware;
QAction *howToUse; private slots:
void on_new();
void on_open();
void on_save();
void on_quit(); void on_copy();
void on_paste();
void on_cut();
void on_allSelect(); void on_howToUse();
void on_aboutSoftware();
void on_changed(); }; #endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QMessageBox> MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
isChanged = false;
text1 = new QTextEdit;//中央编辑区域的实例化
this->setCentralWidget(text1);//设置到中央编辑页面。
text1->setFontPointSize();//修改字体大小。 //添加文件下拉菜单
fileMenu = this->menuBar()->addMenu("文件"); //为下拉菜单添加文件项:
newFile = new QAction("新建",this);//实例化
newFile->setShortcut(tr("CTRL+N"));
fileMenu->addAction(newFile);//添加到显示
connect(newFile,SIGNAL(triggered()),this,SLOT(on_new()));//为当前这个文件项添加一个出发事件,当前窗体响应,执行函数为on_new(). openFile = new QAction("打开",this);//实例化
openFile->setShortcut(tr("CTRL+O"));
fileMenu->addAction(openFile);
connect(openFile,SIGNAL(triggered()),this,SLOT(on_open())); saveFile = new QAction("保存",this);
saveFile->setShortcut(tr("CTRL+S"));
fileMenu->addAction(saveFile);
connect(saveFile,SIGNAL(triggered()),this,SLOT(on_save())); quitFile = new QAction("退出",this);
quitFile->setShortcut(tr("CTRL+Q"));
fileMenu->addAction(quitFile);
connect(quitFile,SIGNAL(triggered()),this,SLOT(on_quit())); editMenu =this->menuBar()->addMenu("编辑"); copyEdit = new QAction("复制",this);
copyEdit->setShortcut(tr("CTRL+C"));
editMenu->addAction(copyEdit);
connect(copyEdit,SIGNAL(triggered()),this,SLOT(on_copy())); pasteEdit = new QAction("粘贴",this);
pasteEdit->setShortcut(tr("CTRL+V"));
editMenu->addAction(pasteEdit);
connect(pasteEdit,SIGNAL(triggered()),this,SLOT(on_paste())); cutEdit = new QAction("剪切",this);
cutEdit->setShortcut(tr("CTRL+X"));
editMenu->addAction(cutEdit);
connect(cutEdit,SIGNAL(triggered()),this,SLOT(on_cut())); allSelectEdit = new QAction("全选",this);
allSelectEdit->setShortcut(tr("CTRL+A"));
editMenu->addAction(allSelectEdit);
connect(allSelectEdit,SIGNAL(triggered()),this,SLOT(on_allSelect())); helpMenu = this->menuBar()->addMenu("帮助"); aboutSoftware = new QAction("关于软件",this);
helpMenu->addAction(aboutSoftware);
connect(aboutSoftware,SIGNAL(triggered()),this,SLOT(on_aboutSoftware())); howToUse = new QAction("如何使用",this);
helpMenu->addAction(howToUse);
connect(howToUse,SIGNAL(triggered()),this,SLOT(on_howToUse())); connect(text1,SIGNAL(textChanged()),this,SLOT(on_changed())); } MainWindow::~MainWindow()
{ } void MainWindow::on_new()
{
if(isChanged){
QMessageBox::information(this,"提示","文件尚未保存");
}else{
text1->setText("");//新建的话把,文本内容置空。
}
} void MainWindow::on_open()
{
if(isChanged){
QMessageBox::information(this,"提示","文件尚未保存");
}else{
fileNameString = QFileDialog::getOpenFileName(this,"打开");//当前窗体,打开文件的对话框的标题是:“打开”
if(fileNameString==NULL){
return ;
}
FILE *pf = fopen(fileNameString.toStdString().data(),"r+");//可读可写的方式打开。
if(pf==NULL)
return ;
char buf[];
QString str;
while(!feof(pf)){
fgets(buf,sizeof(buf),pf);
str+=buf;
}
text1->setText(str);
fclose(pf);
} } void MainWindow::on_save()
{
fileNameString = QFileDialog::getSaveFileName(this,"保存");
if(fileNameString==NULL)
return ;
FILE *pf = fopen(fileNameString.toStdString().data(),"w+");
if(pf==NULL)
return ; QString str = text1->toPlainText();
fputs(str.toStdString().data(),pf);
fclose(pf);
isChanged = true; } void MainWindow::on_quit()
{ if(isChanged){
QMessageBox::information(this,"提示","文件尚未保存,点击右上角×,取消保存");
}else{
this->close();
}
} void MainWindow::on_copy()
{
text1->copy();
} void MainWindow::on_paste()
{
text1->paste();
} void MainWindow::on_cut()
{
text1->cut();
} void MainWindow::on_allSelect()
{
text1->selectAll();
} void MainWindow::on_howToUse()
{
QMessageBox::information(this,"如何使用","同记事本基本相同");
} void MainWindow::on_aboutSoftware()
{
QMessageBox::information(this,"关于软件","Realized By : Letben");
} void MainWindow::on_changed()
{
isChanged = true;
}

开发结果:

利用QT开发一个记事本的更多相关文章

  1. 利用Qt开发跨平台APP

    本文将手把手教你如何在Windows环境下,使用Qt编译出安卓应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux. ...

  2. 利用Qt开发跨平台APP(二)(iOS,使用Qt5.9,很详细,有截图)

    本文将手把手教你如何使用Qt编译出iOS应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux.MAC.Android ...

  3. 利用VS2010开发一个跳转页面aspx

    在开发项目的过程中,由于要集成Cognos的报表通过URL,但是Cognos报表的本身URL长度过程,那么此时就需要开发一个跳转的页面,下面我们就采用VS2010开发一个跳转的页面Default.as ...

  4. 利用MyEclipse开发一个调用webservice接口的程序

    上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选 ...

  5. 【转】 如何利用Cocos2d-x开发一个游戏

    原文:http://blog.csdn.net/honghaier/article/details/7888592 这个问题的结果应该是一个流程.我将从一些长期的PC端游戏开发经验结合Cocos2d- ...

  6. 利用java开发一个双击执行的小程序

    之前我们利用java写了很多东西,但是好像都没有什么实际意义. 因为有意义桌面小程序怎么都得有个界面,可是界面又不太好搞.或者 了解到这一层的人就少之又少了. 呀,是不是还得开辟一些版面来介绍awt和 ...

  7. 利用Qt制作一个helloworld

    使用QT创建第一个 工程: 1.打开应用程序: 2.单击画面中间偏上的 New Project按钮.[要学习使用啊~,传说它的跨平台行很好,QQ就是用它编辑的.] 3.直接点击右下角的选择 按钮. 4 ...

  8. 利用MyEclipse开发一个webservice接口

    一直以来对于接口这个东西都很好奇,各种客户也一直在说那个什么什么数据我们提供给你们一个接口就好了,结果还是不是很明白.于是乎就有了下面的小故事,接下来我们就进入正文吧 ---大概可以分为这样的步骤 1 ...

  9. 【Qt开发】【ARM-Linux开发】 QT在ARM上显示字体的问题

    在PC机上利用QT开发的应用程序在设置字体时,在PC上运行,可根据自己的设置,字体随之变大或变小.而移植到ARM上运行时发现,显示字体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变量字库 ...

随机推荐

  1. jdk1.6新特性

    1.Web服务元数据 Java 里的Web服务元数据跟微软的方案基本没有语义上的区别,自从JDK5添加了元数据功能(Annotation)之后,SUN几乎重构了整个J2EE体 系, 由于变化很大,干脆 ...

  2. HDU 5636 Shortest Path 分治+搜索剪枝

    题意:bc round 74 分析(官方题解): 你可以选择分类讨论, 但是估计可能会写漏一些地方. 只要抽出新增边的端点作为关键点, 建立一个新图, 然后跑一遍floyd就好了. 复杂度大概O(6^ ...

  3. CentOS 7.0 安装 python3.X 脚本

    #!/bin/sh #第一个Linux下的脚本,太多不明白的地方,只是依着网上的例子照葫芦画瓢,能正常运行即可 #运行环境 CentOS 7.0 版本 #首行指定程序的路径,以#号开头的行是注释行 # ...

  4. 判断A树是否包含B树结构

    题目:输入两棵二叉树A和B,判断B是不是A的子结构 分析:根据数的遍历方法,首先想到的是采用递归的方式要更简单些,树A从根节点进行遍历,首先判断与B的根节点值是否相等,如果相等则进行递归遍历验证,否则 ...

  5. codeforce 603B - Moodular Arithmetic

    题意:给出方程 f(kx%p)=kf(x)%p ,f:A->B,不同的映射函数f有几种,其中f,A,B值域为{0,1,2..p-1},p为素数(除了2),k为小于p的一个常数. 思路:明显是求循 ...

  6. 【转载】locate命令的使用

    [说明]转载自 http://www.cnblogs.com/flysnail/archive/2012/05/16/2504266.html 使用locate命令,遇到了这样的情况:当前目录下有一个 ...

  7. Java 的集合框架

    Java集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的. 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一 ...

  8. DTD Tutorial

    The purpose of a DTD (Document Type Definition) is to define the legal building blocks of an XML doc ...

  9. 关于 android的 渲染器 Shader

    因为公司在 自定义的画图上面比较苛刻(各种要求= =),最后又是改来改去的.反正是 Shader起到很大作用,特此记录一下下.在achartengine的基础上没有能满足他们= = androd 提供 ...

  10. jquery.layout框架分割线

    css <link href="${base}/res/common/css/jquery.layout/jquery.layout.css" rel="style ...