QT練習項目

21398 ワード

QT練習項目のテキストエディタ


mianwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_actionOpen_triggered();

    void on_actionNew_triggered();

    void on_actionSave_triggered();

    void on_actionSaveAs_triggered();

    void on_actionDel_triggered();

    void on_actionFind_triggered();

    void on_actionFindNext_triggered();

    void on_actionSwap_triggered();

    void on_actionTranto_triggered();

    void on_actionSelectAll_triggered();

    void on_actionTime_triggered();

    void on_actionFont_triggered();

private:
    Ui::MainWindow *ui;

private:
    QString filename;
    QString filename2;
    QString curfile;
    bool cursaveflag;

    QString findtext;
    QLineEdit *findEdit;
    QPushButton *findBtn;
    QRadioButton *findForward;
    QCheckBox *findcasesensitive;
    QRadioButton *findBackforward;
    QTextDocument::FindFlags option;

    QLabel   *swapLabel;
    QLabel   *swapFindLabel;
    QLineEdit *swapLineEdit;
    QLineEdit *swapFindLineEdit;
    QPushButton *swapFindBtn;
    QPushButton *swapBtn;
    QPushButton *swapAllBtn;

    int linenum;

    QLabel *trantoLabel;
    QLineEdit *trantoLineEdit;
    QPushButton *trantoBtn;

public:
    void LoadFile(QString filename);
    void SaveFile(QString filename);
    void SaveAsFile(QString filename);


public slots:
    void findText();
    void swapfindText();
    void swapText();
    void swapAllText();
    void trantoText();

};

#endif // MAINWINDOW_H

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

#include 
#include 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QPalette palette = ui->textEdit->palette();
    palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
    ui->textEdit->setPalette(palette);

    cursaveflag = false;
    ui->verticalLayout->setMargin(0);

    connect(ui->textEdit,SIGNAL(copyAvailable(bool)),ui->actionCopy,SLOT(setEnabled(bool)));
    connect(ui->textEdit,SIGNAL(copyAvailable(bool)),ui->actionCut,SLOT(setEnabled(bool)));
    connect(ui->textEdit,SIGNAL(copyAvailable(bool)),ui->actionDel,SLOT(setEnabled(bool)));


    connect(ui->actionCopy,SIGNAL(triggered(bool)),ui->textEdit,SLOT(copy()));
    connect(ui->actionPaste,SIGNAL(triggered(bool)),ui->
            textEdit,SLOT(paste()));
    connect(ui->actionCut,SIGNAL(triggered(bool)),ui->textEdit,SLOT(cut()));
    connect(ui->actionExit,SIGNAL(triggered(bool)),this,SLOT(close()));
    connect(ui->actionAbout,SIGNAL(triggered(bool)),this,SLOT(QApplication::aboutQt()));
}

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


void MainWindow::LoadFile(QString filename)
{
    QFile file(filename);
    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream textstream(&file);
        while(!textstream.atEnd())
           ui->textEdit->append(textstream.readLine());
    }
}

void MainWindow::SaveFile(QString filename)
{
    QFile file(filename);
    if(file.open((QFile::WriteOnly | QFile::Text)))
    {
        QTextStream textstream(&file);
        textstream<textEdit->toPlainText();
        cursaveflag = true;
        curfile = QFileInfo(filename).canonicalFilePath();
    }
}

void MainWindow::findText()
{
    QPalette palette = ui->textEdit->palette();
    palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
    ui->textEdit->setPalette(palette);

    option = 0;
    findtext = findEdit->text();

    if(findcasesensitive->isChecked())
        option |= QTextDocument::FindCaseSensitively ;
    if(findBackforward->isChecked())
        option |= QTextDocument::FindBackward;

    if(!ui->textEdit->find(findtext,option))
       QMessageBox::warning(this,tr(" "),tr("  %1").arg(findtext));
}

void MainWindow::swapfindText()
{
    QPalette palette = ui->textEdit->palette();
    palette.setColor(QPalette::Highlight,palette.color(QPalette::Active,QPalette::Highlight));
    ui->textEdit->setPalette(palette);

    findtext = swapFindLineEdit->text();

    if(!ui->textEdit->find(findtext,QTextDocument::FindBackward))
       QMessageBox::warning(this,tr(" "),tr("  %1").arg(findtext));
}

void MainWindow::swapText()
{
    QTextCursor cursor = ui->textEdit->textCursor();

    if(cursor.hasSelection())
        cursor.insertText(swapLineEdit->text());
 //   qDebug()<","<void MainWindow::swapAllText()
{
    QTextCursor cursor;
    QTextCursor cursor1 = ui->textEdit->textCursor();

    while(ui->textEdit->find(swapFindLineEdit->text(),QTextDocument::FindBackward))
    {
        cursor = ui->textEdit->textCursor();
        if(cursor.hasSelection())
            cursor.insertText(swapLineEdit->text());
    }
    ui->textEdit->setTextCursor(cursor1);
}

void MainWindow::trantoText()
{
    bool ok;
    QTextCursor cursor = ui->textEdit->textCursor();
    int number = trantoLineEdit->text().toInt(&ok);

    if(number > linenum)
        QMessageBox::warning(this,tr(" "),tr(" %1").arg(linenum));

    int pos = ui->textEdit->document()->findBlockByLineNumber(number).position();
    cursor.setPosition(pos);
    ui->textEdit->setTextCursor(cursor);
}

void MainWindow::on_actionOpen_triggered()
{

    filename = QFileDialog::getOpenFileName(this);
    if(!filename.isEmpty())
    {
        if(ui->textEdit->document()->isEmpty())
            LoadFile(filename);
        else
        {
            MainWindow *newWin = new MainWindow;
            newWin->show();
            newWin->LoadFile(filename);
        }
    }
}

void MainWindow::on_actionNew_triggered()
{
    MainWindow *newWin = new MainWindow;
    newWin->show();
}

void MainWindow::on_actionSave_triggered()
{
    if(cursaveflag)
        SaveFile(curfile);
    else
        on_actionSaveAs_triggered();

}

void MainWindow::on_actionSaveAs_triggered()
{
    filename2 = QFileDialog::getSaveFileName(this,tr(" "),curfile,"c++ file(*.cpp);;c file(*.c);;txt file(*.txt)");
    if(!filename2.isEmpty())
        SaveFile(filename2);
}

void MainWindow::on_actionDel_triggered()
{
    QTextCursor cursor = ui->textEdit->textCursor();
    if(!cursor.hasSelection())
        cursor.select(QTextCursor::WordUnderCursor);
    cursor.deleteChar();
}

void MainWindow::on_actionFind_triggered()
{
    QDialog *dialog = new QDialog(this);

    dialog->setMaximumSize(100,80);

    findEdit = new QLineEdit(dialog);
    findcasesensitive = new QCheckBox(tr(" "));
    findBackforward   = new QRadioButton(tr(" "));
    findForward       = new QRadioButton(tr(" "));
    findForward->setChecked(true);

    QLabel *dirLabel = new QLabel(tr(" :"));
    findBtn = new QPushButton(tr(" "),dialog);

    QGridLayout *layout = new QGridLayout(dialog);
    layout->addWidget(findEdit,0,0,1,2);
    layout->addWidget(findBtn,0,2);
    layout->addWidget(dirLabel,1,1);
    layout->addWidget(findcasesensitive,2,0);
    layout->addWidget(findBackforward,2,1);
    layout->addWidget(findForward,2,2);

    dialog->show();
    connect(findBtn,SIGNAL(clicked(bool)),this,SLOT(findText()));

}


void MainWindow::on_actionFindNext_triggered()
{
    if(findtext.isEmpty())
        return;

    if(!ui->textEdit->find(findtext,option))
       QMessageBox::warning(this,tr(" "),tr("  %1").arg(findtext));
}

void MainWindow::on_actionSwap_triggered()
{
    QDialog *dialog = new QDialog(this);

    swapFindLabel    = new QLabel(tr(" :"),dialog);
    swapFindLineEdit = new QLineEdit(dialog);
    swapLabel        = new QLabel(tr(" :"),dialog);
    swapLineEdit     = new QLineEdit(dialog);
    swapFindBtn      = new QPushButton(tr(" "),dialog);
    swapBtn          = new QPushButton(tr(" "),dialog);
    swapAllBtn       = new QPushButton(tr(" "),dialog);

    QGridLayout *layout = new QGridLayout(dialog);
    layout->addWidget(swapFindLabel,0,0);
    layout->addWidget(swapFindLineEdit,0,1);
    layout->addWidget(swapFindBtn,0,2);
    layout->addWidget(swapLabel,1,0);
    layout->addWidget(swapLineEdit,1,1);
    layout->addWidget(swapBtn,1,2);
    layout->addWidget(swapAllBtn,3,2);

    dialog->show();
    connect(swapFindBtn,SIGNAL(clicked(bool)),this,SLOT(swapfindText()));
    connect(swapBtn,SIGNAL(clicked(bool)),this,SLOT(swapText()));
    connect(swapAllBtn,SIGNAL(clicked(bool)),this,SLOT(swapAllText()));
}


void MainWindow::on_actionTranto_triggered()
{
    QDialog *trantodialog = new QDialog(this);
    linenum = ui->textEdit->document()->lineCount();

    trantoLabel = new QLabel(tr(" :"),trantodialog);
    trantoLineEdit = new QLineEdit(trantodialog);
    trantoLineEdit->setText(tr("%1").arg(linenum));
    trantoBtn = new QPushButton(tr(" "),trantodialog);

    QGridLayout *layout = new QGridLayout(trantodialog);
    layout->addWidget(trantoLabel,0,0);
    layout->addWidget(trantoLineEdit,0,1);
    layout->addWidget(trantoBtn,0,2);

    trantodialog->show();
    connect(trantoBtn,SIGNAL(clicked(bool)),this,SLOT(trantoText()));
    connect(trantoBtn,SIGNAL(released()),trantodialog,SLOT(close()));
}

void MainWindow::on_actionSelectAll_triggered()
{
    ui->textEdit->selectAll();
}

void MainWindow::on_actionTime_triggered()
{
    QDateTime *date = new QDateTime(QDateTime::currentDateTime());
    QTextCursor cursor = ui->textEdit->textCursor();
    cursor.insertText(date->toString());
}

void MainWindow::on_actionFont_triggered()
{
    bool ok;
    QFont f = QFontDialog::getFont(&ok);
    QTextCharFormat format;
    format.setFont(f);
    if(ok)
    {
        QTextCursor cursor = ui->textEdit->textCursor();
        if(!cursor.hasSelection())
                cursor.select(QTextCursor::WordUnderCursor);
        cursor.mergeCharFormat(format);
        ui->textEdit->mergeCurrentCharFormat(format);
    }
}