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

利用主窗口类实现,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();
}

时间: 2024-11-01 02:23:30

【C/C++学院】(19)QT版:记事本的相关文章

宠物宝宝萌动亮相 《魔法学院》春节版金玉满堂

新春将至,相信大家都在紧锣密鼓地筹备年货,过个原汁原味的中国年,大扫除.穿新衣可是必不可少的环节,图得就是个万象更新.如今,这股推陈出新的春风吹进<魔法学院>里,新版中增加了超多的节日装扮让游戏世界张灯结,年味十足.玩家可以扩建魔法学院挑战新的等级,还能领养可爱的宠物宝宝,抚育它茁壮成长.卖萌神马的它最擅长,更有威武霸气的隐藏技能.图1<魔法学院>春节版的等级上限调整至50级,玩家如愿以偿可再次扩建学院,搭配全新推出的20余款春节装饰,打造一座中西方文化交融的魔法圣殿.勤勤恳恳的魔

【C/C++学院】(16)QT版:幸运大抽奖

程序效果: #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include <QLabel> #include <QPushButton> #include <QTimer> #include <QStringList> class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialo

【Qt编程】Qt版扫雷

        学习要学会举一反三.在以前的<用matlab扫扫雷>一文中,我用matlab简单的编写了一个扫雷小程序.当然,与Windows自带的扫雷程序自然是不敢相提并论.今天我就用c++来写个扫雷程序,算是对c++的练习.在那篇文章中提过,扫雷问题是NP完全问题,不能被解决.网上也有人做过扫雷的辅助工具,但也只是指明肯定是雷.和肯定不是雷的位置,不能完全求解.下面来讲述我的程序设计思路:1.用随机数生成雷分布的矩阵,元素为0表示无雷,1表示有雷.2.通过循环遍历来统计一个元素的周围与之相

新手,求教,编写程序,实现一个记事本功能

问题描述 要求:1.能够输入任意行数的信息2.能够人为控制输入结束2.输入完毕在屏幕上显示出记事本中的内容.使用StreamReader和StreamWriter类 解决方案 解决方案二: 解决方案三:该回复于2011-12-22 09:33:13被版主删除解决方案四: 解决方案五: 解决方案六:该回复于2011-12-22 09:12:19被版主删除解决方案七:上面的资源都非常好,值得借鉴解决方案八:友情帮顶上面都写好了我就不在这里多嘴了...解决方案九: 解决方案十:http://panju

qt5-求指导Linux下QT编译问题

问题描述 求指导Linux下QT编译问题 8C 本人新手 毕设要做一个QT版的聊天软件..下了一份代码 能运行 但是用最新的QT编译过不了求大神帮忙 万分感谢 解决方案 版本问题,找一下之前的版本试一下,qt就是这个比较坑 解决方案二: 请把你的编译错误信息贴出来,大家好给你帮忙啊 解决方案三: 编译出错应该是QT4到QT5的问题..现在好了 可是连接数据有问题 界面打不开 解决方案四: out of memory,内存不够了.还是你数据库连接字符串不正确 解决方案五: 1.什么叫"能运行倒是编

MariaDB10和MySQL5.6社区版压力测试

补上作业,MariaDB10和MySQL5.6社区版压力测试,见下图: sysbench(10.8.8.43) MySQL5.6和MariaDB10.0.11(10.8.8.100) 压力测试参数: 机器配置: 比较差,DELL R610,2颗4核CPU,RAID1(WriteBack策略)7200转SAS硬盘. 可以明显的看到,在高并发的时候,MySQL5.6.19的性能减少了50%. 下面是top和压力测试截图: MySQL5.6.19 load average达到195,已经超负荷. TP

谁有C#版的mp3源代码啊

问题描述 谁有MP3的源代码啊,要可以缓存和缓冲数据的,麻烦提供个下载地址,小弟先谢谢了! 解决方案 解决方案二:该回复于2009-02-05 09:53:19被版主删除解决方案三:该回复于2009-02-05 09:53:09被版主删除解决方案四:kao!楼上搞什么?黄色广告??

Android平台Qt开发入门教程

     很多人会问,Android平台可以不使用Java开发应用程序??      我做Android平台native开发之前,也有这么想过,但是我又想,底层系统全是c/c++代码,用c/c++开发Android平台程序是可能的,只是需要使用系统非公开的API(就是android源代码,而非NDK里面提供的头文件),比如libui和skia.       好了,由于我的工作是把C++中间件移植到Android平台,所以会对Qt for android这个项目比较了解,毕竟国内做这些的还比较少,

爱的奉献--javascript无刷新实时显示当前完整时间!!!

问题描述 我们经常登录一些网站在头部位置都会有显示当前的时间.这个是如何来制作的呢.今天我们用javascript来制作这一案例.此案例可以实现无刷新实时显示当前完整时间.下面给出完整脚本代码,我们一起来学习吧.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlx