QT记事本

来源:互联网 发布:淘宝买武士刀犯法吗 编辑:程序博客网 时间:2024/05/02 05:14

现在窗体上绘制好自己的记事本界面,然后再头文件中定义几个需要的槽和函数。我解决了几个小问题,就是再添加菜单的图标时,明明添加了图标,却无法显示,后来在每个菜单项的IconVisibalMenu选项构上。然后在使用copy和paste()函数时出现了错误,不知道怎么调用到这个函数。革命尚未成功,同志仍需努力。

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

    ui->setupUi(this);
    setCentralWidget(this->ui->textEdit);
//   this->setStyleSheet(tr("background:url(:/images/Jellyfish.jpg)"));
   // this->setStyleSheet(tr("background:rgb(102,102,0,255)"));//这一句会将设置的背景图像覆盖掉
    //对于菜单栏对应的是Action,背景和快捷键都是可以设置的
   // ui->actionNew->setIcon(QIcon(QPixmap("./images/new.png")));
  //  ui->actionOpen->setIcon(QIcon(QPixmap("./open.png")));
   // ui->action_Save->setIcon(QIcon(QPixmap("./images/save.png")));
    connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(newslot()));
    connect(ui->actionOpen,SIGNAL(triggered()),this,SLOT(openslot()));
    connect(ui->action_Save,SIGNAL(triggered()),this,SLOT(saveslot()));
    connect(ui->action_Save_As,SIGNAL(triggered()),this,SLOT(saveasslot()));
    connect(ui->action_EXIT,SIGNAL(triggered()),this,SLOT(close()));

    connect(ui->textEdit,SIGNAL(copyAvailable(bool)),ui->action_Copy,SLOT(setEnabled(bool)));
    connect(ui->action_Copy,SIGNAL(triggered()),this,SLOT(copy()));//系统自带的函数
    connect(ui->action_Cut,SIGNAL(triggered()),this,SLOT(cut()));

    ui->action_Copy->setEnabled(false);
    ui->action_Cut->setEnabled(false);

}
void MainWindow::closeEvent(QCloseEvent *event)
{

    if(ui->textEdit->document()->isModified()==true )
     {
        QMessageBox::StandardButton ret=QMessageBox::warning(this,"save files","document has been modifeld!",QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel);
        if(ret==QMessageBox::Save)
            saveslot();//保存对应的函数
        else if(ret==QMessageBox::Discard)//如果是取消则什么都不做
            ;
        else
            {
            event->ignore();
            return;
        }
    }
    event->accept();
}


MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::saveslot()
{
    if(ui->textEdit->document()->isModified())
    {
        if(currentname.isEmpty())
        {
            saveasslot();
        }
        else
        {
            QFile file(currentname);
            if(file.open(QIODevice::WriteOnly))
            {
                QDataStream out(&file);
                out<<ui->textEdit->toPlainText();
            }
            else
                qDebug()<<"wrong here ";
        }
        ui->textEdit->document()->setModified(false);
    }
}






void MainWindow::newslot()
{
    if(ui->textEdit->document()->isModified())
    {
        QMessageBox::StandardButton ret= QMessageBox::warning(this,"save files","document has been modified",QMessageBox::Save |QMessageBox::Discard|QMessageBox::Cancel);
        if(ret==QMessageBox::Save)
                  saveslot();
              else if(ret==QMessageBox::Discard)
                  ;
              else
                  return;
    }
    currentname="";
    ui->textEdit->setPlainText("");//新建一个文件时,将文本框恢复到空字符串
}

void MainWindow::openslot()//打开文件
{
    QString filename=QFileDialog::getOpenFileName(this,"open files","","all files(*)");
    if(filename.isEmpty())//r如果文件为空则什么都不做
        return;
    else
    {
        currentname=filename;//将文件名保存位现在文件名
        QFile file(filename);
        if(file.open(QIODevice::ReadOnly))//如果能一2只读方式打开文件
        {
            //这里一开始用的QIOStream,一样的代码却不成功
            //QTextStream类提供了使用QIODevice读写文本的基本功能。
          //  文本流类的功能界面和标准的C++的iostream类非常相似。
            //iostream和QTextStream的不同点是我们的流操作在一个很容易被继承的QIODevice上,
            //而iostream只能操作一个不能被继承的FILE *指针。
           QTextStream in(&file);

           ui->textEdit->setPlainText(in.readAll());//将文本编辑框的值设置为字符串的值

        }
        else
            qDebug()<<"lloha";
    }
}


void MainWindow::saveasslot()
{
    QString filename=QFileDialog::getSaveFileName(this,"save file","","all files(*)");
       if(filename.isEmpty())
           return;
       else
       {
           QFile file(filename);
           currentname=filename;
           if(file.open(QIODevice::WriteOnly))
           {
               QDataStream out(&file);
               out<<ui->textEdit->toPlainText();
           }
           else
           {
               qDebug()<<"open failed";
           }
           ui->textEdit->document()->setModified(false);
       }
}

void MainWindow::help()
{
}
void MainWindow::helpqt()
{
}