【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();
}


目录
相关文章
|
22天前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
31 1
|
30天前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
79 0
|
30天前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
48 0
|
30天前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
89 0
|
1月前
|
安全 前端开发 C++
C++视角下的Qt按钮:从基础应用到高级定制(二)
C++视角下的Qt按钮:从基础应用到高级定制
45 2
|
28天前
|
编译器 API 数据安全/隐私保护
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
97 3
|
30天前
|
机器学习/深度学习 文字识别 并行计算
【C/C++ OCR识别】深入探索:Qt C++与OCR识别的完美结合
【C/C++ OCR识别】深入探索:Qt C++与OCR识别的完美结合
74 2
|
1月前
|
监控 C++
C++ Qt开发:QProcess进程管理模块
Qt是一个跨平台的C++图形库,简化了窗体应用开发,支持通过拖放组件提升效率。本章节关注`QProcess`组件,它用于控制和管理进程,例如执行命令、运行可执行文件及与外部进程通信。`QProcess`提供多种方法如`start`、`waitForStarted`和`waitForFinished`等,实现启动、监控和交互。示例展示了如何使用`QProcess`获取系统进程和信息,通过`tasklist`和`systeminfo`命令,并将结果展示在`QTreeWidget`中。
28 0
C++ Qt开发:QProcess进程管理模块
|
1月前
|
SQL XML API
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
13 0
|
1月前
|
Java API C++
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
45 1

热门文章

最新文章

推荐镜像

更多