QT記事本

wzm10455發表於2013-04-02

現在窗體上繪製好自己的記事本介面,然後再標頭檔案中定義幾個需要的槽和函式。我解決了幾個小問題,就是再新增選單的圖示時,明明新增了圖示,卻無法顯示,後來在每個選單項的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()
{
}


相關文章