区别于之前创建爱的各个工程,这次我们在这里选择基类为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. Java String StringBuffer StringBuilder

    String  字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer  字符串变量  线程安全 在堆上创建,每次追加操作在原对象上进行操作:  速度 StringBuffer ...

  2. Poj 1953 World Cup Noise之解题报告

    World Cup Noise Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16369   Accepted: 8095 ...

  3. [原创]一种简单的cocos2d-x动态更新方案

    介绍一个曾经在cocos2d-x项目中使用过的动态更新方案,这个方案简单易行,针对小的项目非常有用. 这个方案有两个核心的关键词:JSON,MD5. 原理可以简单地概括为:服务端持有所有动态更新资源文 ...

  4. Python几个算法实现

    1.平衡点问题: 比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点:假如一个数组中的元素,其前面的部分等 ...

  5. python PIL下的各种问题

    为了实现验证码的功能,使用了PIL.结果出现各种问题: 先是"ImportError: The _imagingft C module is not installed",goog ...

  6. Polymorphism

    多态定义(百度百科):多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述 ——多态性是允 ...

  7. 转载 C#中使用结构来传递多个参数

    C#中当参数超过5个时,建议用结构来传递多个参数. 示例代码如下: public struct MyStruct { public string str; public int number; } c ...

  8. poj 4045 (树形DP)

    先选一点为根节点找出所有父节点i到下面所有点距离和dp[i],该父节点下面有多少个点Node[i]. 然后求出所有节点的所有非子节点到该点的距离dp1[v]+=(dp1[u]+(dp[u]-dp[v] ...

  9. javascript深入理解闭包(转)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  10. Effective C++ 条款45

    本节条款的题目是运用成员模板接受全部兼容类型 作者阐述自己的观点是通过智能指针的样例. 在学习本节条款之前我们要先明确关于隐式转化的问题 例如以下代码: #include<iostream> ...