利用QT开发一个记事本
区别于之前创建爱的各个工程,这次我们在这里选择基类为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开发一个记事本的更多相关文章
- 利用Qt开发跨平台APP
本文将手把手教你如何在Windows环境下,使用Qt编译出安卓应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux. ...
- 利用Qt开发跨平台APP(二)(iOS,使用Qt5.9,很详细,有截图)
本文将手把手教你如何使用Qt编译出iOS应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux.MAC.Android ...
- 利用VS2010开发一个跳转页面aspx
在开发项目的过程中,由于要集成Cognos的报表通过URL,但是Cognos报表的本身URL长度过程,那么此时就需要开发一个跳转的页面,下面我们就采用VS2010开发一个跳转的页面Default.as ...
- 利用MyEclipse开发一个调用webservice接口的程序
上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选 ...
- 【转】 如何利用Cocos2d-x开发一个游戏
原文:http://blog.csdn.net/honghaier/article/details/7888592 这个问题的结果应该是一个流程.我将从一些长期的PC端游戏开发经验结合Cocos2d- ...
- 利用java开发一个双击执行的小程序
之前我们利用java写了很多东西,但是好像都没有什么实际意义. 因为有意义桌面小程序怎么都得有个界面,可是界面又不太好搞.或者 了解到这一层的人就少之又少了. 呀,是不是还得开辟一些版面来介绍awt和 ...
- 利用Qt制作一个helloworld
使用QT创建第一个 工程: 1.打开应用程序: 2.单击画面中间偏上的 New Project按钮.[要学习使用啊~,传说它的跨平台行很好,QQ就是用它编辑的.] 3.直接点击右下角的选择 按钮. 4 ...
- 利用MyEclipse开发一个webservice接口
一直以来对于接口这个东西都很好奇,各种客户也一直在说那个什么什么数据我们提供给你们一个接口就好了,结果还是不是很明白.于是乎就有了下面的小故事,接下来我们就进入正文吧 ---大概可以分为这样的步骤 1 ...
- 【Qt开发】【ARM-Linux开发】 QT在ARM上显示字体的问题
在PC机上利用QT开发的应用程序在设置字体时,在PC上运行,可根据自己的设置,字体随之变大或变小.而移植到ARM上运行时发现,显示字体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变量字库 ...
随机推荐
- Codeforces 628D 数位dp
题意:d magic number(0<=d<9)的意思就是一个数,从最高位开始奇数位不是d,偶数位是d 题目问,给a,b,m,d(a<=b,m<2000)问,a,b之间有多少 ...
- 【ruby on rail 项目之 VPS下载机】
[idea] 感觉互联网上国内难以下载资源的资源,通过VPS下载后再拖回来,想做个集成功能的.这里定个计划.打算开始做,项目会在github上同步更新. [start]
- 430的启动,I/O中断
感言:看了这一集MSP430的讲解之后,我才知道msp430真的和arm7没什么区别了,可能在某些功能上要比arm7要优秀 1:430的系统复位和初始化初始化 430的系统复位有两个来源 1:POR上 ...
- theano学习指南5(翻译)- 降噪自动编码器
降噪自动编码器是经典的自动编码器的一种扩展,它最初被当作深度网络的一个模块使用 [Vincent08].这篇指南中,我们首先也简单的讨论一下自动编码器. 自动编码器 文献[Bengio09] 给出了自 ...
- bzoj 2820 YY的GCD(莫比乌斯反演)
Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...
- NOIP2006 能量项链
洛谷1063 能量项链 本题地址:http://www.luogu.org/problem/show?pid=1063 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N ...
- codeforce 604B More Cowbell
题意:n个球,分成k堆.问堆的最大值的最小. #include <bits/stdc++.h> typedef long long ll; using namespace std; int ...
- Android NDK r8 windows环境搭建
Android NDK r8 windows环境搭建 一.默认基础环境为已经完成Android开发环境的搭建 需要的软件及插件 1. JDK-7u25 2. Eclipse 3. Android SD ...
- AndroidManifest笔记
1.android:configChanges如果配置了这个值,比如"orientation",在屏幕旋转时会调用Activity的onConfigurationChanged,而 ...
- 精彩,sinox.org官网贴满winxp死亡大字报
sinox杀死windowxp不可避免,不用说,微软还自己掐死他!!! 中国人会升级正版 windows7吗?昨天也许会,但今天不会了,因为 sinox大字报出来了! 这下举国皆知了. 换装sinox ...