利用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上运行时发现,显示字体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变量字库 ...
随机推荐
- jQuery mobile 核心功能
原文地址:http://jquerymobile.com/demos/1.0b2/#/demos/1.0b2/docs/about/features.html 基于 jQuery 核心,使用和jQue ...
- 问题:关于坛友的一个js轮播效果的实现
需求:点击向前按钮进行向前翻页,向后按钮进行向后翻页,点击中间蓝色小圆圈可以来回自由切换 我的大概思路:先默认显示一个div 然后在原位置在隐藏一个div 给按钮添加click事件,转到下一个时 ...
- 数论——lucas定理
网上证明很多,虽然没看懂.... 主要解决大组合数取模的情况 费马小定理求大组合数: a^(p-1)=1%p; 两边同除a a^(p-2)=1/a%p; C(n,m)= n!/(m!*(n-m)!) ...
- 容斥原理——uva 10325 The Lottery
首先推荐一篇介绍容斥原理很好的博客http://www.cppblog.com/vici/archive/2011/09/05/155103.html 题意:求1~n中不能被给定m个数中任意一个数整除 ...
- codeforce 605BE. Freelancer's Dreams
题意:给你n个工程,做了每个工程相应增长x经验和y钱.问你最少需要多少天到达制定目标.时间可以是浮点数. 思路:杜教思路,用对偶原理很简易.个人建议还是标准解题法,凸包+线性组合. #include& ...
- prefuse学习(一)用非数据库连接和xml的方式读入数据
prefuse正常的数据源需要从ConnectionFactory中生产出来,但是如果平时不想用里面给的方法得到数据,就需要手动创造Graph里面所需要的内容两个Table 下面是我自己写的从文件中读 ...
- 在Visual Studio中利用NTVS创建Pomelo项目
刚看新闻,才知道微软发布了Node.js Tools for Visual Studio(NTVS),受够了WebStorm输入法Bug的困扰,这下终于可以解脱了.以Pomelo为例,运行命令:pom ...
- [坑]c#中double转字符串精度丢失问题记录
在项目遇到了一个比较大的double值,然后出现了一些意想不到的状况: double b=1141.161994934082; b.ToString();//'1141.16199493408' 然后 ...
- Java中的IP对象以及本地域名解析
本地域名解析操作步骤: 1.打开C:\WINDOWS\system32\drivers\etc目录 2.找到host文件,用记事本打开 3.添加“空间IP 域名” package WebProgra ...
- hdu 2715 Herd Sums
Herd Sums Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...