利用QT开发一个记事本

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

然后默认目录就是

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

main.cpp:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.resize(800,500);
    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 = 0);
    ~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(16);//修改字体大小。

    //添加文件下拉菜单
    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[1024];
        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;
}

开发结果:

时间: 2024-11-18 03:58:07

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

[Qt 5.6.2] 利用Qt实现一个难度可变的2048小游戏

利用Qt实现一个难度随时可调的2048小游戏 一.游戏简介 1.规则创新 胜利条件:达成2048 难度变化:玩家可以通过调整难度条来控制随机池(2.4.8.16)中各个数出现的概率,同时也会改变分数的加成比例 移动触发:每次移动后会从随机池中按照概率随机选取一个数,将其随机放置在一个空余位置上 分数计算:总分=基础分+加成分,基础分+=合并的数值,加成分+=随机生成的数值*加成比例 2.游戏效果 二.设计思路 先将该项目分为游戏入口.主窗口设计与游戏逻辑三个主要模块,再在这三个模块的基础上继续细

【以太坊开发】利用Oraclize开发一个投注合约(一):原理介绍

智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 本篇介绍如何利用Oraclize开发一个投注智能合约,开始coding之前,这一节讲述一下理论. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来获取数据,指定数据源和参数.Oraclize根据收到的请求获取数据,利用callBack函数返回结果. Oraclize的数据源列表如下: URL:互联网中的连接. WolframAlpha:Wolfr

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

在开发项目的过程中,由于要集成Cognos的报表通过URL,但是Cognos报表的本身URL长度过程,那么此时就需要开发一个跳转的页面,下面我们就采用VS2010开发一个跳转的页面Default.aspx 1:打开VS2010新建网站 2:选择C#语言,ASP.NET空网站 3:项目JumpPage已经创建好,默认都有一个web.config配置文件 4:本例的web.config内容为,添加了appSettings节点,供下面的操作使用 <?xml version="1.0"?

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

上一篇文章我们已经学习了如何使用Java 工具MyEclipse开发一个webservice接口,那么接口开发好了如何调用?接下来我们就来解决这个问题. 1:首先随便创建一个Java project选中--New  Webservice Client 2:选中JAX-WS,下一步 3:在WSDL URL里面写入接口的测试地址 ↓接下来WSDL VAlidation竟然报错了,如何解决请往下看 把localhost换位主机IP地址 下一步 ,OK 通过通过验证 客户端会默认给我们选中需要导入的包

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

之前我们利用java写了很多东西,但是好像都没有什么实际意义. 因为有意义桌面小程序怎么都得有个界面,可是界面又不太好搞.或者 了解到这一层的人就少之又少了. 呀,是不是还得开辟一些版面来介绍awt和 swing... 算了 先把这个 双击执行的小程序 贡献出来. 这次 在分享一下源代码[以前还没有上传过源代码,布置怎么个搞法] 要求是: 输入一个 后缀名,然后输入所在目录,然后 点击查找,比如我们可以 输入F:\,然后查找 F盘下面的所有后缀名为比如.pdf 举例: 主要是 看了很多 资源,然

利用Qt制作一个helloworld

使用QT创建第一个 工程: 1.打开应用程序: 2.单击画面中间偏上的 New Project按钮.[要学习使用啊~,传说它的跨平台行很好,QQ就是用它编辑的.] 3.直接点击右下角的选择 按钮. 4.为我们的项目起一个名字,并 放在一个 路径下面.[可以点击设为默认路径,避免修改路径的繁琐] 5.下一步 6. 在基类中,点选下拉菜单调成QWidget,之后点击下一步. 修改后: 点击下一步. 7.点击完成. 8.在菜单栏中点击构建,并点击构建项目"Test". 9.然后在左下角点击查

利用MyEclipse开发一个webservice接口

一直以来对于接口这个东西都很好奇,各种客户也一直在说那个什么什么数据我们提供给你们一个接口就好了,结果还是不是很明白.于是乎就有了下面的小故事,接下来我们就进入正文吧 ---大概可以分为这样的步骤 1:新建webservice project,Framework版本选择JAX-WS 2:编写测试类,写一个简单的AddUser方法 3:在webservice project 上面 new webservice 确定后,在project和接口主类同一目录会生成一个Delegate.Java 4:加入

利用Qt调用计算器

之前有了第一个项目那么很快就会有第二个 这次 我们来调用 一些系统函数. 就不从头写了. 直接写比较重要的地方,如果又不太懂的地方欢迎小纸条或者参见利用 QT制作一个 helloworld http://www.cnblogs.com/letben/p/5205060.html 1.双击widget.ui到设计界面. 2.拖一个PushButton到中间灰色区域内. 3.右键PushButton在下拉菜单中转到槽. 4.在跳转之后,键入:system.("calc"); 如图: 5.构

用Qt开发第一个Hello World程序

配置好Qt的环境变量之后,我们才可以进行下面的通过终端来使用Qt开发这个第一个程序 因为Qt的文件路径不能有中文否则会报错,所以一般都把工程文件都建立在根目录 我们创建的Qt程序包含两个部分:1.GUI程序 2.显示字符串,所以输入代码: 编译这个程序 如果提示找不到qmake就说明环境变量配置有问题,正常如上不会有任何提示 输入ls之后,我们可以看到目录下生成了一个pro文件,这是一个与平台无关的项目文件 然后接着输入qmake就可以完成编译,然后用ls看看有什么文件,多了一个Makefile