【C/C++学院】(19)QT版:记事本

简介: <p>利用主窗口类实现,QT版:记事本。<br></p> <p></p> <pre code_snippet_id="610578" snippet_file_name="blog_20150302_1_5401672" name="code" class="cpp">#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMa

利用主窗口类实现,QT版:记事本。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCloseEvent>
#include <QTextEdit>
#include <QMenu>
#include <QMenuBar>
#include <QAction>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void openfile();
    void newfile();
    void savefile();
    void exitfile();
    void copyfile();
    void cutfile();
    void pastefile();

private:
    void createMenus();
    void createActions();
    void closeEvent(QCloseEvent *event);
    QTextEdit *text;
    QMenu *fileMenu;
    QMenu *editMenu;
    QAction *openFileAction;
    QAction *newFileAction;
    QAction *saveFileAction;
    QAction *exitFileAction;
    QAction *copyFileAction;
    QAction *cutFileAction;
    QAction *pasteFileAction;

};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include <QMessageBox>
#include <QFileDialog>
#include <QTextStream>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle("记事本");
    text = new QTextEdit(this);
    this->setCentralWidget(text);
    text->setFontPointSize(20);//设置默认字体大小
    createActions();
    createMenus();

}

MainWindow::~MainWindow()
{

}

void MainWindow::openfile()
{
    QString filename = QFileDialog::getOpenFileName(this, tr("打开文件"));
    if (filename.isEmpty())//如果没有选择要打开的文件名,函数退出
    {
        return ;
    }
    QFile data(filename);
    if (data.open(QFile::ReadOnly))//以只读方式打开文件
    {
        text->clear();//首先将text空间内容清空
        QTextStream stream(&data);
        while (!stream.atEnd())//循环读取文件按,直到文件尾结束循环
        {
            text->append(stream.readLine());//在text控件内容尾部追加从文件中读取的内容
        }
        data.close();//读完文件后关闭文件
    }else
    {
        QMessageBox::critical(this, tr("错误"), data.errorString());
    }
}

void MainWindow::newfile()
{
    text->clear();
}

void MainWindow::savefile()
{
    QString filename = QFileDialog::getSaveFileName(this, tr("保存文件"));
    if (filename.isEmpty())//如果没有选择文件,函数退出
    {
        return ;
    }
    QFile data(filename);
    if (data.open(QFile::WriteOnly | QFile::Truncate))//以写方式打开文件,如果关键存在,则是追加模式
    {
        QTextStream stream(&data);
        stream<<text->toPlainText();//将text控件内容转化为QString后,写入文件
        data.close();
    }
    else
    {
        QMessageBox::critical(this, tr("错误"), data.errorString());
    }
}

void MainWindow::exitfile()
{
    close();
    //exit(0);//直接退出
}

void MainWindow::copyfile()
{
    text->copy();
}

void MainWindow::cutfile()
{
    text->cut();
}

void MainWindow::pastefile()
{
    text->paste();
}

void MainWindow::createMenus()
{
    fileMenu = menuBar()->addMenu(tr("文件"));//建立文件菜单
    fileMenu->addAction(openFileAction);
    fileMenu->addAction(newFileAction);
    fileMenu->addAction(saveFileAction);
    fileMenu->addSeparator();//加入一个分隔符
    fileMenu->addAction(exitFileAction);

    editMenu = menuBar()->addMenu(tr("编辑"));
    editMenu->addAction(copyFileAction);
    editMenu->addAction(cutFileAction);
    editMenu->addAction(pasteFileAction);
}

void MainWindow::createActions()
{
    openFileAction = new QAction(tr("打开"), this);
    openFileAction->setShortcut(tr("Ctrl+o"));
    connect(openFileAction, SIGNAL(triggered()), this, SLOT(openfile()));

    newFileAction = new QAction(tr("新建"), this);
    newFileAction->setShortcut(tr("Ctrl+N"));
    connect(newFileAction, SIGNAL(triggered()), this, SLOT(newfile()));

    saveFileAction = new QAction(tr("保存"), this);
    saveFileAction->setShortcut(tr("Ctrl+s"));
    connect(saveFileAction, SIGNAL(triggered()), this, SLOT(savefile()));

    exitFileAction = new QAction(tr("退出"), this);
    exitFileAction->setShortcut(tr("Ctrl+q"));
    connect(exitFileAction, SIGNAL(triggered()), this, SLOT(exitfile()));

    copyFileAction = new QAction(tr("复制"), this);
    copyFileAction->setShortcut(tr("Ctrl+c"));
    connect(copyFileAction, SIGNAL(triggered()), this, SLOT(copyfile()));

    cutFileAction = new QAction(tr("剪切"), this);
    cutFileAction->setShortcut(tr("Ctrl+x"));
    connect(cutFileAction, SIGNAL(triggered()), this, SLOT(cutfile()));

    pasteFileAction = new QAction(tr("粘贴"), this);
    pasteFileAction->setShortcut(tr("Ctrl+v"));
    connect(pasteFileAction, SIGNAL(triggered()), this, SLOT(pastefile()));
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    QMessageBox::StandardButton button;
    button = QMessageBox::question(this, tr("退出程序"), QString(tr("是否退出")),
                                   QMessageBox::Yes | QMessageBox::No);
    if (button == QMessageBox::Yes)
    {
        event->accept();//接受退出信号,程序退出
    }else
    {
        event->ignore();//忽略退出信息,程序继续运行
    }
}

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    w.resize(600, 400);
    w.show();

    return a.exec();
}


相关文章
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
209 1
C++跨平台框架Qt
Qt是一个功能强大的C++跨平台应用程序开发框架,支持Windows、macOS、Linux、Android和iOS等操作系统。它提供了250多个C++类,涵盖GUI设计、数据库操作、网络编程等功能。Qt的核心特点是跨平台性、丰富的类库、信号与槽机制,以及良好的文档和社区支持。Qt Creator是其官方IDE,提供了一整套开发工具,方便创建、编译、调试和运行应用程序。Qt适用于桌面、嵌入式和移动应用开发。
WK
78 5
|
5月前
|
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
120 1
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
5月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
229 2
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
141 4
|
5月前
|
C++ QT 单例模式
C++ QT 单例模式
92 0
Qt(C++)使用QChart静态显示3个设备的温度变化曲线
QChart模块是Qt Charts库的基础,提供了用于创建和显示各种类型图表的类和接口。Qt Charts库是一个功能丰富、易于使用的数据可视化工具库,可以帮助开发者在应用程序中添加漂亮而又交互性强的图表。
87 1
Qt(C++)使用QChart静态显示3个设备的温度变化曲线
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
5月前
|
【C++】C++ QT实现 学生信息管理系统(QT源码)【独一无二】
【C++】C++ QT实现 学生信息管理系统(QT源码)【独一无二】
190 0
Qt(C++)使用QChart动态显示3个设备的温度变化曲线
Qt的QChart是一个用于绘制图表和可视化数据的类。提供了一个灵活的、可扩展的、跨平台的图表绘制解决方案,可以用于各种应用程序,如数据分析、科学计算、金融交易等。
313 1